之前已经对爬虫基本知识点用一篇博客总结过来,因为xpath实在太重要了,单独放一篇
"""
xpath使用 参考:https://www.w3school.com.cn/xpath/index.asp
"""
from lxml import etree
text = '''
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
'''
html = etree.HTML(text)
result = etree.tostring(html)
print(result.decode('utf-8'))
"""
父节点
"""
print(html.xpath('//a[@href="link4.html"]/../@class')) # ['item-1']
print(html.xpath('//a[@href="link4.html"]/parent::*/@class')) # ['item-1'] 父节点后的所有
"""
属性匹配
"""
print(html.xpath('//li[@class="item-0"]')) # [<Element li at 0x7fc245c3eec0>, <Element li at 0x7fc245c3ee80>]
"""
文本获取
"""
print(html.xpath('//li[@class="item-0"]/text()')) # ['
']
print(html.xpath('//li[@class="item-0"]/a/text()')) # ['first item', 'fifth item']
print(html.xpath('//li[@class="item-0"]//text()')) # ['first item', 'fifth item', '
']
"""
属性获取
"""
print(html.xpath('//li/a/@href')) # ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
"""
属性多值匹配
"""
text2 = '''
<li class="li li-first" name="item"><a href="link1.html">first item</a></li>
'''
html2 = etree.HTML(text2)
print(html2.xpath('//li[@class="li"]/a/text()')) # []
# 使用contains()方法,第一个参数传入属性名称,第二个参数传入属性值
print(html2.xpath('//li[contains(@class, "li")]/a/text()')) # ['first item']
"""
多属性匹配
or 或 age=19 or age=20
and 与 age>19 and age<25
mod 计算除法的余数 5 mod 2
| 计算两个节点集 //book | //cd
+ 加法
- 减法
* 乘法
div 除法
= 等于 age=12
!= 不等于
< 小于
<=
>
>=
"""
print(html2.xpath('//li[contains(@class, "li") and @name="item"]/a/text()')) # ['first item']
"""
按序选择
"""
print(html.xpath('//li[1]/a/text()')) # ['first item'] 选择第一个li节点(从1开始)
print(html.xpath('//li[last()]/a/text()')) # ['fifth item']
print(html.xpath('//li[position()<3]/a/text()')) # ['first item', 'second item'] # 位置小于3
print(html.xpath('//li[last()-2]/a/text()')) # ['third item'] 倒数第3个
"""
节点轴选择
"""
时间太紧,不像努力了?
浏览器Elements的搜索是支持Xpath的
可以使用浏览器复制出Xpath(公式很长,需要修改)
借助浏览器插件?
自行百度