爬虫标准库Xpath

XPath
全称XML Path Language,是一门在XML文档中查找信息的语句,可用来在XML文档中对元素和属性进行遍历。“官方文档w3xpath”
安装(windows)

~~pip install lxml~~ 豆瓣源	![pip  install  -i  https://pypi.doubanio.com/simple/ lxml

在这里插入图片描述
XML和 HTML 的区别

数据格式描述作用
XML可扩展标记语言用来传输和存储数据
HTML超文本标记语言用来显示数据

常见语法

表达式含义
/从根节点开始
//从任意节点
.从当前节点
从当前节点的父节点
@选取属性
text()选取文本

常用用法

from lxml import etree
data = """
        <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" id="1" ><a href="link4.html">fourth item</a></li>
                 <li class="item-0" data="2"><a href="link5.html">fifth item</a>
             </ul>
         </div>
        """
html = etree.HTML(data)#构造了一个XPath解析对象。etree.HTML模块可以自动修正HTML文本。
li_list = html.xpath('//ul/li')#选取ul下面的所有li节点
#li_list = html.xpath('//div/ul/li')#选取ul下面的所有li节点
print(li_list)
a_list = html.xpath('//ul/li/a')#选取ul下面的所有a节点
print(a_list)
herf_list = html.xpath('//ul/li/a/@href')#选取ul下面的所有a节点的属性herf的值
print(herf_list)
text_list = html.xpath('//ul/li/a/text()')#选取ul下面的所有a节点的值
print(text_list)

通配符

通配符含义
*选取任何元素节点
@*选取任何属性的节点
li_list = html.xpath('//li[@class="item-0"]')#选取class为item-0的li标签
print(li_list)
text_list = html.xpath('//li[@class="item-0"]/a/text()')#选取class为item-0的li标签 下面a标签的值
print(text_list)
li1_list  = html.xpath('//li[@id="1"]')#选取id属性为1的li标签
print(li1_list)
li2_list  = html.xpath('//li[@data="2"]')#选取data属性为2的li标签
print(li2_list)

表达式

表达式含义
[?]选取第几个节点
last()选取最后一个节点
last()-1选取倒数第二个节点
position()-1选取前两个
li_list = html.xpath('//ul/li[1]')  # 选取ul下面的第一个li节点
print(li_list)
li1_list = html.xpath('//ul/li[last()]')  # 选取ul下面的最后一个li节点
print(li1_list)
li2_list = html.xpath('//ul/li[last()-1]')  # 选取ul下面的最后一个li节点
print(li2_list)
li3_list = html.xpath('//ul/li[position()<= 3]')  # 选取ul下面前3个标签
print(li3_list)
text_list = html.xpath('//ul/li[position()<= 3]/a/@href')  # 选取ul下面前3个标签的里面的a标签里面的href的值
print(text_list)

函数

函数名含义
starts-with选取以什么开头的元素
contains选取包含一些信息的元素
and并且的关系
or或者的关系
li_list = html.xpath('//li[starts-with(@class,"item-1")]')#获取class包含以item-1开头的li标签
print(li_list)
li1_list = html.xpath('//li[contains(@class,"item-1")]')#获取class包含item的li标签
print(li1_list)
li2_list = html.xpath('//li[contains(@class,"item-0") and contains(@data,"2")]')#获取class为item-0并且data为2的li标签
print(li2_list)
li3_list = html.xpath('//li[contains(@class,"item-1") or contains(@data,"2")]')#获取class为item-1或者data为2的li标签
print(li3_list)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卧关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值