CodeGym /Java 课程 /Python SELF ZH /使用 BeautifulSoup 解析 HTML

使用 BeautifulSoup 解析 HTML

Python SELF ZH
第 31 级 , 课程 2
可用

1. 加载和解析 HTML 文档

功能简要概述

requests 就是我们的“信使”, 它出发去获取网页的 HTML 代码。它 发送 HTTP 请求并获取页面,就像送披萨的快递员一样, 只是没有“玛格丽特”披萨和包装盒。

BeautifulSoup 则是我们的 “厨师”,它可以轻松地将获取的 HTML 拆解成各个部分(标签、属性和文本), 这样我们就可以使用它了。它会帮我们找到需要的元素并保存所有重要的信息。

使用 requests 库

现在我们准备发送第一个 HTTP 请求并获取 页面 HTML 代码。让我们练习加载页面 example.com 吧。这个网站 是互联网的老古董,非常适合作为初学者的练习对象。

Python

import requests

url = 'http://example.com'
response = requests.get(url)

# 检查一切是否正常
if response.status_code == 200:
    print("页面加载成功!")
else:
    print("出了点问题。错误代码:", response.status_code)

这个程序会向 URL 发送请求并根据响应输出成功或错误。 如果一切正常,我们就能拿到 HTML 页面代码作为文本。

跟踪错误代码

如果你实施网页抓取,那么你经常会遇到 页面应该加载但却没有加载的情况。所以分析错误代码 是任何处理多个页面抓取项目中必需的一部分。

这主要是因为网站拥有者并不喜欢有人抓取他们的数据。 首先,这会给网站带来负载(比如同时抓取数千个页面)。 其次,这些是他们的数据,他们靠此赚钱。有很多方法 可以对抓取进行对抗:CAPCHA, CloudFlare 等等。

对于企业来说,理想状况是能够抓取所有竞争对手的信息, 而自己却不被抓取。就像冷战一样。

使用 BeautifulSoup 解析 HTML

获得 HTML 代码后,我们可以使用 BeautifulSoup 来研究它。这就像 打开一本书并阅读其内容:

Python

from bs4 import BeautifulSoup

# 将 HTML 代码的内容传递给 BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')

# 看看里面有什么
print(soup.prettify())

方法 prettify() 会将 HTML 代码格式化, 以便你能更好地研究它。在接下来的课程里, 我们会深入研究这个 HTML,就像小孩子玩沙子一样开心。 然后回家虽然会很累很脏,但也很快乐 :)

3. 实践:加载和分析 HTML

为了加深理解,让我们完成一个实际练习。 我们会尝试从 example.com 中提取 标题和描述。为此,我们将结合 我们的 HTML 知识和最新学到的 BeautifulSoup。

数据提取

Python

# 提取页面标题
title = soup.title.string
print("页面标题:", title)

# 提取主标题 (h1)
main_heading = soup.h1.string
print("主标题:", main_heading)

# 提取段落文本内容
paragraph = soup.find('p').text
print("第一个段落:", paragraph)

在这个例子中,我们使用了属性 title, h1 和方法 find(),从页面中 抽取需要的信息。我们就像网络侦探一样,在“犯罪现场” 寻找线索!

4. 常见错误

在使用网页抓取的过程中,你可能会遇到一些 常见错误,它们可能包括对 HTTP 请求的错误处理、 数据提取不正确或 HTML 解析错误。编写可靠 稳定的脚本需要耐心和实践。例如, 请务必检查状态代码 (response.status_code),以确保你的请求 成功完成。不正确地使用方法 find()find_all() 可能导致错误,特别是如果你没有考虑到 HTML 页面结构的话。 在开始抓取之前,请务必先分析 HTML。

网页抓取有很多实际应用:从数据收集分析到 自动监控商品价格。这些知识可能在求职面试中非常有用, 因为他们可能会问你一些项目代码示例。在实际工作中, 例如市场营销人员使用抓取来监控竞争对手的价格, 开发人员则用它与外部网站集成。

你在处理新闻聚合器和分析系统的信息时, 会用到网页抓取的知识。你可以自动化 日常任务,编写脚本,从不同的来源 自动收集数据。让我们继续开发我们的虚拟应用程序, 成为真正的网络高手吧!

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION