XPath解析库的基本用法
XPath介绍
XPath全称XML Path Language(XML路径语言),是一门在XML文档中查找信息的语言,同样可查找HTML文档.
所以在写爬虫时可使用XPath来做相应的信息提取. (使用XPath需安装lxml库)
XPath常用规则
- // 从当前节点选取子孙节点
- / 从当前节点选取直接子节点
- . 选取当前节点
- … 选取当前节点的父节点
- @ 选取属性
基本用法
- 构造XPath解析对象
from lxml import etree
text = '''一段HTML文本'''
html = etree.HTML(text) #html即为XPath解析对象
#也可导入文件
html = etree.parse('html文件位置',etree.HTMLParser())
- 选取所有节点
用//开头的XPath规则选取所有符合要求的节点,得到的结果是一个列表.
result = html.xpath('//*') #选取所有节点
- 选取子节点
用/或//即可查找元素的直接子节点或子孙节点
result = html.xpath('//li/a') #选取li节点的子节点a
- 选取父节点
可用…或者parent:: 来选取父节点
result = html.xpath('//a[@href="link4.html"]/../@class') #获取href属性为link4.html的a节点的父节点,然后获得父节点的class属性.
#第二种方式
result = html.xpath('//a[@href="link4.html"]/parent::*/@class')
- 属性匹配
用@符号进行属性过滤,属性限制要放在中括号里.
result = html.xpath('//li[@class="item-0"]') #选取class属性为item-0的li节点
- 属性获取
也是使用@符号,不过不要中括号.
result = html.xpath('//li/a/@href') #获取li下所有a节点的href属性
- 属性多值匹配
有时某个节点的某个属性有多个值,此时需要使用contains()函数.
contains方法第一个参数传入属性,第二个参数传入属性值.
result = html.xpath('//li[contains(@class,"li")]/a') #获取class属性包含li的li节点的所有子节点a
- 多属性匹配
有时需要根据多个属性确定一个节点,可使用and运算符来连接多个属性.
更多运算符用法
result = html.xpath('//li[contains(@class,"li") and @name="item"]/a')
#获取class属性包含li且name属性为item的li节点,再获取其所有子a节点.
- 文本获取
使用XPath中的text()方法获取节点的文本.
result = html.xpath('//li[@class="item-0"]/a/text()')
#获取class属性为item-0的所有li节点的所有子节点a包含的文本.
- 按序选择
有时我们只需要获取部分节点,XPath可让你自主选择.
#传入索引的方式选择节点
result = html.xpath('//li[1]/a/text()')
#last()函数可选择最后一个节点
result = html.xpath('//li[last()]/a/text()')
#选择了位置小于3的节点 (位置下标从1开始而不是0)
result = html.xpath('//li[position()<3]/a/text()')
#选择了倒数第三个节点
result = html.xpath('//li[last()-2]/a/text()')
- 使用节点轴进行选择
#获取第一个li节点的所有祖先节点
result = html.xpath('//li[1]/ancestor::*')
#获取第一个li节点的祖先div
result = html.xpath('//li[1]/ancestor::div')
#获取第一个li节点的所有属性
result = html.xpath('//li[1]/attribute::*')
#获取第一个li节点的所有直接子节点a
result = html.xpath('//li[1]/child::a')
#获取第一个li节点的所有子孙节点
result = html.xpath('//li[1]/descendant::*')
#获取第一个li节点之后的所有节点
result = html.xpath('//li[1]/following::*')
#获取第一个li节点之后所有同级节点
result = html.xpath('//li[1]/following-sibling::*')

XPath全称XML Path Language,常用于XML和HTML文档信息提取。在爬虫中,XPath通过特定规则如//、/、.、…、@等进行节点选择。基本用法包括构造XPath解析对象、选取节点、属性匹配等。例如,//用于选取所有子孙节点,/@属性名用于选取属性,contains()用于属性多值匹配,text()用于获取节点文本。


被折叠的 条评论
为什么被折叠?



