前篇我们能够知晓xpath的语法规则和python中的lxml库的用法,这一次我们在从lxml库用法中进阶一下。总共六个基本知识用法。
目录
示例文件
首先假设我们有一个简单的HTML文件(这个需要先创建HTML文件,放在你自已需要用到的目录下,确保python的代码能够连接到HTML文件,以免路径出错),代码如下
<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></li>
</ul>
</div>
有的一个假设HTML文件,我们还需要构建一下python中的lxml语法,如下:
from lxml import etree
# 声明 HTML 文本并初始化 XPath 解析对象
html = etree.parse("./text.html", etree.HTMLParser())
# 输出修正后的 HTML 代码并转换成 str 类型
result = etree.tostring(html)
print(result.decode('utf-8'))
代码解释
输出结果
好了,这样我们就有一个简单的示例,然后根据下面的知识点一一对应
所有节点
一般会用 // 开头的 XPath 规则来选取所有符合要求的节点。
例如*选取所有节点,代码如下
result = html.xpath('//*') # * 选取所有类型的节点
print(result)
完整输出结果
例如选取li节点,代码如下:
result = html.xpath('//li') # 选取li的节点
print(result) # 打印所有
print(result[0]) # 打印第一个
完整输出结果
子节点
通过 / 或 // 即可查找元素的子节点或子孙节点
result = html.xpath('//li/a') # 通过追加 /a 即选择了所有 li 节点的所有直接 a 子节点
print(result)
输出结果
父节点
使用 ..
(这个是有两个小点点)可以选取当前节点的父节点。
result = html.xpath('//a[@href="link4.html"]/../@class')
print(result)
输出结果
属性匹配
使用 @
符号后接属性名可以选取元素的属性。
result = html.xpath('//li[@class="item-0"]')
print(result)
输出结果
代码片段解释
文本获取
使用 text()
可以选取元素的文本内容。
result = html.xpath('//li[@class="item-0"]/a/text()')
print(result)
输出结果
属性获取
节点属性 @符号就可以获取节点内部文本
result = html.xpath('//li/a/@href')
print(result)
输出结果
好了,关于爬虫的理论我们已经知晓并如何使用,当然也可以自行去查网络资源,补充相关爬虫知识点,并用来实战。
爬虫理论再怎么完美,如果不经过实践,理论也会产生错误,只有实践才是检验真理的唯一标准。
好了,后续我会记录一下自已的爬虫心得以及会根据我我所记录的知识用来项目实战。我是好运,想要好运