xpath基础知识点

博客主要围绕爬虫中使用XPath进行数据提取展开,给出了将字符串转换为xml对象后,使用XPath进行各种数据提取操作的示例,如获取特定标签、属性,筛选符合条件的标签等,展示了XPath在爬虫数据提取中的多种用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from lxml import etree

text="""

<title>新华书店</title>

<book href="http://www.langlang2017.com/">
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book href="http://www.baidu.com/">
  <title lang="zh">Learning XML</title>
  <price>39.95</price>
</book>

<book>
  <title>python 大全</title>
  <price>99.95</price>
</book>
"""

#将字符串对象转换为xml对象才可以使用xpath

html_xml = etree.HTML(text)
print(html_xml)

#1 获取所有的book标签

result1=html_xml.xpath("//book")
print(result1)

#2获取第一个book标签

first_book=result1[0]#返回第一个book标签,类型是xml可以在此基础上用xpath
print(first_book)
print(type(first_book))

#3 获取第一本书当前节点的href属性
#两个斜杠表示全局查找,从bookstore开始
#/ 表示从从bookstore开始,但是不能全局查找
#.表示当前标签下进行查找
f

irst_href=first_book.xpath("//@href")#直接使用first_book作为根节点
print(first_href)

#4 获取first_book节点的父节点的下面的所有book节点的href
#…表示当前节点的父节点

href_list=first_book.xpath("..//book/@href")
print(href_list)

#5获取价格小于40的书名

book_name=html_xml.xpath("//book[price<40]/title/text()")
print(book_name)

#6获取价格等于99.95的书

book_name=html_xml.xpath("//book[price=99.95]/title/text()")
print(book_name)

#7 获取book标签中的title标签和price标签
| 表示只要符合一个,就可以返回,是或者的关系

result2=html_xml.xpath("//book/title|//book/price")
print(result2)
print(len(result2))

#8 获取href含有baidu字符的book标签 然后获取此标签的书名
#contains表示包含

result3=html_xml.xpath("//book[contains(@href,'baidu')]/title/text()")
print(result3)

#9获取bookstore前两本书的书名
#position表示位置从1开始

result4=html_xml.xpath('//book[position()<3]/title/text()')
print(result4)

#10 匹配所有节点属性
#* 表示任何属性

result5=html_xml.xpath("//@*")
print(result5)

#11 获取所有有属性的title标签并且获取文本信息
#[@*] 修饰title,表示含有属性

result6=html_xml.xpath("//title[@*]/text()")
print(result6)

#12 获取href=http://www.langlang2017.com/的book节点,在此基础上再获取book后面的兄弟book节点。获取他们的书名

esult7=html_xml.xpath("//book[@href='http://www.langlang2017.com/']/following-sibling::book/title/text()")
print(result7)

13获取href=http://www.langlang2017.com/的book节点,在此基础上再获取book后面的兄弟book,href="http://www.baidu.com/"节点。获取他们的书名

result8=html_xml.xpath("//book[@href='http://www.langlang2017.com/']/following-sibling::book[@href='http://www.baidu.com/']/title/text()")
print(result8)

#14 使用child获取所有的书名

result9=html_xml.xpath("//book/child::title/text()")
print(result9)

#15 从title出发,获取最后的书名

result10=html_xml.xpath("//title/ancestor::bookstore/book[last()]/title/text()")
print(result10)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值