项目八:学会使用python爬虫解析库(小白大成级)

本文详细介绍了使用Python的lxml库进行HTML解析,包括选取所有节点、子节点、父节点、属性匹配、文本获取和属性获取的基本XPath用法,并通过示例展示了如何在实际HTML文件中应用这些技术。

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

前篇我们能够知晓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'))

代码解释

  1. 导入 etree 模块:

    from lxml import etree

    这行代码从 lxml 库中导入了 etree 模块,它是用于处理 XML 和 HTML 文档的 API。

  2. 解析 HTML 文件:

    html = etree.parse("./text.html", etree.HTMLParser())

    使用 etree.parse() 函数加载并解析一个 HTML 文件。第一个参数是文件路径 ./text.html,这表示文件位于当前工作目录下的 text.html第二个参数 etree.HTMLParser() 指定了一个 HTML 解析器,它会在解析过程中自动修复 HTML 中的常见错误,如未闭合的标签等。

  3. 序列化为字符串:

    result = etree.tostring(html)

    etree.tostring() 函数将 html 解析对象(代表整个 HTML 文档的树结构)转换为一个包含原始 HTML 内容的字节串(bytes)。这一步不直接输出到控制台,因为结果是一个字节串,而不是普通的字符串。

  4. 解码为 UTF-8 字符串:

    print(result.decode('utf-8'))

    由于 etree.tostring() 返回的是字节串,而我们通常需要将其作为普通字符串来处理或输出,所以使用 decode('utf-8') 方法将字节串解码为 UTF-8 编码的字符串。然后,使用 print() 函数将解码后的字符串输出到控制台。

这段代码的目的是读取 text.html 文件的内容,并将其作为字符串输出到控制台。这在调试或分析 HTML 文件内容时非常有用。例如,你可能想要查看一个网页的结构,或者在自动化测试中验证页面的 HTML 内容。

请注意,这段代码假设 text.html 文件位于当前工作目录中,并且该文件是一个有效的 HTML 文档。如果文件路径或内容有问题,你可能会遇到错误或异常。

输出结果

好了,这样我们就有一个简单的示例,然后根据下面的知识点一一对应

所有节点

一般会用 // 开头 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)

输出结果

代码片段解释

XPath查询来选择所有class属性为"item-0"的<li>元素

//li[@class="item-0"]的XPath表达式选择了文档中所有具有class属性为"item-0"的<li>元素。

根据HTML文档内容,会获得一个包含满足条件的<li>元素的列表。如果没有符合条件的<li>元素,则会返回一个空列表。

如果HTML文档包含符合条件的<li>元素,那么result将会是一个包含这些元素的列表。

文本获取

使用 text() 可以选取元素的文本内容。

result = html.xpath('//li[@class="item-0"]/a/text()')
print(result)

输出结果

属性获取

节点属性 @符号就可以获取节点内部文本

result = html.xpath('//li/a/@href')
print(result)

输出结果

好了,关于爬虫的理论我们已经知晓并如何使用,当然也可以自行去查网络资源,补充相关爬虫知识点,并用来实战。

爬虫理论再怎么完美,如果不经过实践,理论也会产生错误,只有实践才是检验真理的唯一标准。

好了,后续我会记录一下自已的爬虫心得以及会根据我我所记录的知识用来项目实战。我是好运,想要好运

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

基地是带病毒的

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

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

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

打赏作者

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

抵扣说明:

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

余额充值