Python HTML解析详解

HTML解析是任何网络爬虫应用的基础,Python中提供了多个解析HTML的库,包括BeautifulSoup、lxml、html5lib等。这里我们将使用BeautifulSoup来演示如何解析HTML。

安装BeautifulSoup

在安装BeautifulSoup之前,需要先安装一个Python包管理器pip。在终端中输入以下命令安装pip。

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py

安装完成pip后,输入以下命令来安装BeautifulSoup。

pip install BeautifulSoup4

解析HTML

我们将使用BeautifulSoup来解析一个简单的HTML文件,其中包含了一个标题和两个链接。我们使用open函数来打开该文件,读取其中的文本。

from bs4 import BeautifulSoup

with open('example.html') as f:
    soup = BeautifulSoup(f.read(), 'html.parser')

在这个例子中,使用了open函数来打开名为example.html的文件,并创建了一个BeautifulSoup对象souphtml.parser是一个HTML解析器,它将HTML代码解析成一个树形结构。

读取文件后,我们就可以使用BeautifulSoup的各种方法来遍历和查询HTML文档了。

遍历HTML树形结构

我们可以使用soup对象中的children来获取HTML文档中的所有顶级标签。每个标签都是一个Tag类型的对象,包含了标签名、属性和子节点等信息。

for child in soup.children:
    print(child)

输出:

<html>
<head>
<title>Example</title>
</head>
<body>
<a href="https://www.google.com">Google</a>
<a href="https://www.bing.com">Bing</a>
</body>
</html>

我们也可以使用soup对象中的descendants来遍历HTML文档中的所有标签,包括嵌套的标签。

for tag in soup.descendants:
    print(tag)

输出:

<html>
<head>
<title>Example</title>
</head>
<body>
<a href="https://www.google.com">Google</a>
Google
<a href="https://www.bing.com">Bing</a>
Bing
</body>
</html>

查询HTML文档

我们可以使用soup对象中的各种方法来查询HTML文档中的标签和内容。

1.查询标签

使用soup.find_all方法来查询一个HTML文档中所有的标签,该方法返回一个列表。

links = soup.find_all('a')
print(links)

输出:

[<a href="https://www.google.com">Google</a>, <a href="https://www.bing.com">Bing</a>]

2.查询属性

如果我们只想查询标签中的某一个属性,可以使用tag.get方法来获取该属性的值。

for link in links:
    url = link.get('href')
    print(url)

输出:

https://www.google.com
https://www.bing.com

3.查询文本

使用tag.string可以获取一个标签中的文本内容。

for link in links:
    text = link.string
    print(text)

输出:

Google
Bing

修改HTML文档

如果我们需要修改HTML文档中的内容,可以直接修改Tag对象的属性或文本内容。例如:

link = soup.find('a')
link['href'] = 'https://www.yahoo.com'
link.string = 'Yahoo'

该代码将第一个链接的href属性修改为https://www.yahoo.com,并将链接文本修改为Yahoo

修改完成后,我们可以使用soup对象的prettify方法将修改后的HTML文档格式化输出。该方法将自动缩进和换行,使HTML文档更易于阅读。

html = soup.prettify('utf-8')
with open('modified.html', 'wb') as f:
    f.write(html)

使用以上代码,我们可以将修改后的HTML文档保存

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

然然学长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值