Python爬虫中的BeautifulSoup库,解析HTML轻松提取数据

网安智编 厦门萤点网络科技 2026-01-02 00:06 46 0
爬虫 - 爬虫(Web )是指通过编写 程序从互联网上自动提取信息的过程。 爬虫的基本流程通常包括发送 HTTP 请求获取网页内容、解析网页并提取数据,然后存储数据。 的丰富生态使其成为开发爬虫的热门语言,特别是由于其强大的库支持...

爬虫 -

爬虫(Web )是指通过编写 程序从互联网上自动提取信息的过程。

爬虫的基本流程通常包括发送 HTTP 请求获取网页内容、解析网页并提取数据,然后存储数据。

的丰富生态使其成为开发爬虫的热门语言,特别是由于其强大的库支持。

一般来说,爬虫的流程可以分为以下几个步骤:

本章节主要介绍 ,它是一个用于解析 HTML 和 XML 文档的 库,能够从网页中提取数据,常用于网页抓取和数据挖掘。

beautifulsoup 爬虫_Python爬虫BeautifulSoup教程_BeautifulSoup网页数据提取方法

是一个用于从网页中提取数据的 库,特别适用于解析 HTML 和 XML 文件。

能够通过提供简单的 API 来提取和操作网页中的内容,非常适合用于网页抓取和数据提取的任务。

安装

要使用 ,需要安装 和 lxml 或 html.(一个 HTML 解析器)。

我们可以使用 pip 来安装这些依赖:

pip install beautifulsoup4
pip install lxml  # 推荐使用 lxml 作为解析器(速度更快)

如果你没有 lxml,可以使用 内置的 html. 作为解析器。

基本用法

用于解析 HTML 或 XML 数据,并提供了一些方法来导航、搜索和修改解析树。

常见的操作包括查找标签、获取标签属性、提取文本等。

要使用 ,需要先导入 ,并将 HTML 页面加载到 对象中。

通常,你会先用爬虫库(如 )获取网页内容:

实例

from bs4

# 使用 获取网页内容

url = '' # 抓取bing搜索引擎的网页内容

= .get(url)

# 使用 解析网页

soup = (.text, 'lxml')  # 使用 lxml 解析器

# 解析网页内容 html. 解析器

# soup = (.text, 'html.')

获取网页标题:

实例

from bs4

# 指定你想要获取标题的网站

url = '' # 抓取bing搜索引擎的网页内容

# 发送HTTP请求获取网页内容

= .get(url)

# 中文乱码问题

. = 'utf-8'

# 确保请求成功

if . == 200:

# 使用解析网页内容

soup = (.text, 'lxml')

# 查找标签

= soup.find('title')

# 打印标题文本

if :

print(.())

else:

print("未找到标签")

else:

print("请求失败,状态码:", .)

执行以上代码,输出标题为:

搜索 - Microsoft 必应

中文乱码问题

使用 库抓取中文网页时,可能会遇到编码问题,导致中文内容无法正确显示,为了确保能够正确抓取并显示中文网页,通常需要处理网页的字符编码。

自动检测编码 通常会自动根据响应头中的 -Type 来推测网页的编码,但有时可能不准确,此时可以使用 来自动检测编码。

执行以上代码,输出为:

utf-8

如果你知道网页的编码(例如 utf-8 或 gbk),可以直接设置 .:

response.encoding = 'utf-8'  # 或者 'gbk',根据实际情况选择

查找标签

提供了多种方法来查找网页中的标签,最常用的包括 find() 和 ()。

输出结果类似如下:

新闻
----------------------------
http://news.baidu.com
----------------------------
[新闻, hao123, 地图, 视频,

获取标签的文本

通过 () 方法,你可以提取标签中的文本内容:

实例

from bs4

# 指定你想要获取标题的网站

url = '' # 抓取bing搜索引擎的网页内容

# 发送HTTP请求获取网页内容

= .get(url)

# 中文乱码问题

. = 'utf-8'

soup = (.text, 'lxml')

# 获取第一个

标签中的文本内容

= soup.find('p').()

# 获取页面中所有文本内容

= soup.()

print()

输出结果类似如下:

 百度一下,你就知道           
...

查找子标签和父标签你可以通过 和 属性访问标签的父标签和子标签:

# 获取当前标签的父标签

Python爬虫BeautifulSoup教程_beautifulsoup 爬虫_BeautifulSoup网页数据提取方法

parent_tag = first_link.parent # 获取当前标签的所有子标签 children = first_link.children

输出结果类似如下:

新闻
----------------------------
 新闻 hao123 地图 视频 贴吧  登录   更多产品 

查找具有特定属性的标签

你可以通过传递属性来查找具有特定属性的标签。

例如,查找类名为 -class 的所有 div 标签:

# 查找所有 class="example-class" 的 
标签 divs_with_class = soup.find_all('div', class_='example-class') # 查找具有 id="unique-id" 的

标签 unique_paragraph = soup.find('p', id='unique-id')

获取搜索按钮,id 为 su :

Python爬虫BeautifulSoup教程_beautifulsoup 爬虫_BeautifulSoup网页数据提取方法

输出结果为:

百度一下

高级用法CSS 选择器

也支持通过 CSS 选择器来查找标签。

() 方法允许使用类似 的选择器语法来查找标签:

# 使用 CSS 选择器查找所有 class 为 'example' 的 
标签 example_divs = soup.select('div.example') # 查找所有 标签中的 href 属性 links = soup.select('a[href]')

处理嵌套标签

支持深度嵌套的 HTML 结构,你可以通过递归查找子标签来处理这些结构:

# 查找嵌套的 
标签 nested_divs = soup.find_all('div', class_='nested') for div in nested_divs: print(div.get_text())

修改网页内容

允许你修改 HTML 内容。

我们可以修改标签的属性、文本或删除标签:

转换为字符串

你可以将解析的 对象转换回 HTML 字符串:

# 转换为字符串
html_str = str(soup)

属性与方法

以下是 中常用的属性和方法:

方法/属性描述示例

()

用于解析 HTML 或 XML 文档并返回一个 对象。

soup = (, 'html.')

.()

格式化并美化文档内容,生成结构化的字符串。

print(soup.())

.find()

查找第一个匹配的标签。

tag = soup.find('a')

.()

查找所有匹配的标签,返回一个列表。

tags = soup.('a')

.()

查找当前标签后所有符合条件的标签。

tags = soup.find('div').('p')

.()

查找当前标签前所有符合条件的标签。

tags = soup.find('div').('p')

.()

返回当前标签的父标签。

= tag.()

.()

查找当前标签的所有父标签。

= tag.()

.()

查找当前标签的下一个兄弟标签。

= tag.()

.g()

查找当前标签的前一个兄弟标签。

= tag.g()

.

获取当前标签的父标签。

= tag.

.

获取当前标签的下一个兄弟标签。

= tag.

.

获取当前标签的前一个兄弟标签。

= tag.

.()

提取标签内的文本内容,忽略所有HTML标签。

text = tag.()

.attrs

返回标签的所有属性,以字典形式表示。

href = tag.attrs

.

获取标签内的字符串内容。

= tag.

.name

返回标签的名称。

= tag.name

.

返回标签的所有子元素,以列表形式返回。

= tag.