xpath中两个冒号_爬虫学习(5)—XPath

本文介绍了XPath的使用,包括选择所有节点、子节点、父节点、属性匹配、文本获取、属性获取、多值匹配、多属性匹配、顺序选择、节点轴选择等。XPath提供强大的功能,如匹配规则、内建函数,使得网页解析更为高效。通过实例展示了XPath在Python中如何配合lxml库进行网页解析。
摘要由CSDN通过智能技术生成

之前我们写了一个简单的爬虫,在提取页面信息时我们使用正则表达式来匹配内容,但是正则表达式的书写比较繁琐,而且一旦错误就可能导致匹配失败。对于网页的节点来说,它可以定义id,class或其他的属性,而且节点之间还有层次关系,在网页中可以通过xpath后css选择器来定位一个或多个节点。那么,我们在解析页面时,利用CSS和XPath选择器来定位节点,再调用相关方法来获取其正文内容或属性。本文介绍XPath。

1.XPath概述

XPath的选择功能十分强大,提供了100多个内建函数,用于字符串、数值、时间的匹配和节点、序列的处理。

2.XPath常用规则

nodename          选取此节点的所有子节点
/                 从当前节点选取直接子节点
//                从当前节点选取子孙节点
.                 选取当前节点
..                选取当前节点的父节点
@                 选取属性

这里就是XPath的常用匹配规则,示例如下:

//title[@lang='eng']

这个就表示选择所有名称为title,同时属性lang的值为eng的节点。

3.准备工作

安装好lxml库。

4.实例引入

我们来通过实例来感受一下使用XPath来对网页进行解析的过程。

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'))

7578606c22876c6832391b9c48f6bbdf.png

这里我们先导入lxml库的etree模块,然后声明一段HTML文本,在调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。我们可以注意到HTML文本中最后一个li节点是没有闭合的,但是etree模块可以自动修正HTML 文本。

我们调用tostring()方法即可输出修正后的HTML代码,但是结果是bytes类型。这里利用decode()方法将其转换为str类型。

我们也可以通过直接读取文件来进行解析。

from lxml import etree

html = etree.parse('./test.html', etree.HTMLParser())
result = etree.tostring(html)
print(result.dec
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值