☰
Python爬虫利器:BeautifulSoup4快速入门
2026/10/2 8:21:55 网站建设 项目流程

爬虫 -网络爬虫就是指, 通过编写程序这种方式, 来实现从互联网上面自动获取信息的整个过程。

通常来说, 爬虫的操作流程是这样子的, 先把 HTTP 请求给发出去, 好去拿到网页里的内容, 然后对网页进行解析并且把数据给提取出来, 接着再把数据存起来。

它的生态非常丰富, 这让它变成是开发爬虫热门语言了。尤其是由于它有库支持功能强大这一原因。

通常情况下, 爬虫这一整套的流程, 可以被划分成为好多个不同的步骤, 而这些步骤是以下这些:

本章节主要来做一个介绍。这个介绍的内容是一个库。这个库专门用于解析 HTML 文档, 同时也用于解析 XML 文档。它具备从网页中提取数据的能力。它被频繁地应用在实际操作之中。这种应用场景常见于网页抓取工作。它也常用在需要进行数据挖掘的过程中。

这是一个库, 专门用来从网页上抓取数据, 在处理和分析那些 HTML 格式以及 XML 格式的文档时, 它表现得特别拿手。

它能够借助提供比较简单的一些接口, 去获取网页里面的信息, 还能动手改动这些信息, 这样的情形是特别的适合那些需要上网抓资料, 以及从网络上把各种数据进行收集出来的工作场合。

安装

想要使用它的话, 需要去安装 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设定为使用.html作为编码方式获取的纯文本内容。

把那个网页的标题给拿到手。

实例

from bs4

你应当明确地指定一个网站, 以便从中获取所需的标题。

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

首先发送HTTP请求, 接着获取网页内容。

= .get(url)

# 中文乱码问题

. = 'utf-8'

我们必须采取有效措施来确保请求成功。

假如等于二百这种情况是真的存在。

使用解析网页内容。

soup是由使用文本内容以及利用lxml解析库所构成的对象。

# 查找标签

= soup.find('title')

# 打印标题文本

if :

print(.())

else:

print("未找到标签")

else:

输出, 请求失败的情况是, 对应的状态码就是那个内容。

当你把上面写好的那些代码拿去执行之后, 屏幕上面出现的这个输出的标题呢。

搜索 - Microsoft 必应

中文乱码问题

当人们在利用那个库去抓取中文网页的时候, 有可能会碰到编码方面的麻烦事, 这种麻烦事会使得那些汉字内容没法被正确地显示出来。为了能确保自己能够正确地把中文网页抓下来并且还能让它显示得对劲, 在操作的过程中通常是得把网页字符编码这一块给处理好才是。

自动检测编码这个功能通常会自动根据响应头中的内容类型来推测网页的编码, 但是这种做法有时并不准确, 在这种情况下用户可以使用其他方法来确保正确识别编码。

把上面这段代码运行起来, 得到的结果是:

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方法, 在括号里面填入查找目标。

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

= soup.()

输出结果并打印显示。

输出结果类似如下:

,你就知道

...

你可以分别利用对应的属性, 来获取指定标签的子级元素以及父级元素, 从而实现查找的目的。

# 获取当前标签的父标签

parent_tag = first_link.parent

# 获取当前标签的所有子标签

children = first_link.children

输出结果类似如下:

新闻

----------------------------

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

我们需要去找到那些具备特定属性的标签。

您能够通过传送属性, 去查找那类带有特定属性的标签。

打个比方, 咱们去把那些 class 属性里面带有 -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:

输出结果为:

在高级用法这个方面, 关于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.')

.()

对文档内容实施格式化操作以及美化处理, 由此构建生成出一个拥有清晰结构特征的字符串结果。

运行那段带有soup的()的代码。

.find()

查找出最先出现匹配成功的那一个标签。

tag = soup.find('a')

.()

你需要把所有的可以匹配得到的标签都找出来, 然后把这些结果整理成为一份列表供调用。

tags = soup.('a')

.()

我们要去查找在当前的标签后面的那些符合所有相关条件的标签。

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

.()

你要去查找在现在这个标签的前面, 所有都能符合那个条件限制的标签。。

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

.()

返回那个当前标签所属于的上一级标签。

等于标签的括号。

.()

去查找那个当前标签的所有父标签。

就是标签的意思。()

.()

我们要去查找那个标签, 并且需要找到它后面的紧跟着的另外一个兄弟标签。

= tag.()

.g()

去查找一下, 在当前这个标签的前面, 看看是不是有一个紧挨着的兄弟标签存在。

= 标签。获取()

.

把当前标签所对应的那个父层级的标签给弄到手。

= tag.

.

你要去获取那个当前标签后面紧跟着的、同一个级别的兄弟元素的。

= tag.

.

获取当前标签前面的那个兄弟标签。

= tag.

.()

把标签里面的那些文本文字给提取出来, 然后把所有的HTML标志都直接省略掉。

文本是标签的括号里面什么都没有。

.attrs

请将返回标签中出现的各项属性进行提取, 并以一个字典对象的形式来完成呈现操作。

href = tag.attrs

.

拿到这个标签里面装着的字符串内容。

= tag.

.name

返回标签的名称。

= tag.name

.

返回所有被包含在标签里面的子元素, 然后把这些子元素整理成一个列表给返回出去。

= tag.

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询