XPath库的用法

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

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的更多用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值