Python爬虫神器!BeautifulSoup从安装到实战全攻略

B站影视 内地电影 2025-06-20 16:28 1

摘要:Python 中用于解析 HTML 和 XML 文档的第三方库,能将复杂的 HTML/XML 内容转化为易于遍历、搜索和修改的 Python 对象,常与 requests 等库配合,用于网络爬虫提取数据,也可用于处理本地 HTML/XML 文件内容,简化数据提

Python 中用于解析 HTML 和 XML 文档的第三方库,能将复杂的 HTML/XML 内容转化为易于遍历、搜索和修改的 Python 对象,常与 requests 等库配合,用于网络爬虫提取数据,也可用于处理本地 HTML/XML 文件内容,简化数据提取流程 。

1. 使用 pip 安装

最常用的方式是通过 pip 安装 beautifulsoup4 库(注意不是 beautifulsoup ,4 代表版本系列 ),同时建议安装 lxml 解析器(解析效率更高,也可使用 Python 内置的 html.parser 解析器 ),在命令行执行:

pip install beautifulsoup4 lxml

若只想用 Python 内置解析器,执行:

pip install beautifulsoup4

2. 验证安装

打开 Python 交互环境或新建 .py 文件,输入以下代码:

import bs4

print(bs4.__version__)

若能正常输出版本号(如 4.12.3 等 ),则安装成功。

(一)创建 BeautifulSoup 对象

需先获取 HTML/XML 内容(可来自网络请求、本地文件读取等 ),再用其创建 BeautifulSoup 对象,指定解析器。

1. 从字符串解析

假设已有 HTML 字符串,示例代码:

from bs4 import BeautifulSoup

html_doc = """

示例页面

这是段落内容

示例链接

"""

# 使用 lxml 解析器,也可替换为 'html.parser'

soup = BeautifulSoup(html_doc, 'lxml')

2. 从本地文件解析

若 HTML/XML 内容存于本地文件(如 example.html ),代码:

from bs4 import BeautifulSoup

with open('example.html', 'r', encoding='utf-8') as f:

soup = BeautifulSoup(f, 'lxml') # 同样可换解析器

(二)常用对象与方法

BeautifulSoup 解析后,主要涉及 Tag(标签 )、NavigableString(标签内文本 )、BeautifulSoup(文档对象本身 )、Comment(注释 )等对象,常用操作如下:

1. 获取标签及内容

print(title_tag) # 输出示例页面

print(title_tag.string) # 输出 示例页面,获取标签内文本

按属性查找(如找 class 为 content 的

标签 ):

p_tag = soup.find('p', class_='content') # class 后加下划线避免与 Python 关键字冲突

print(p_tag.text) # 输出 这是段落内容

◦ 获取多个标签:用 find_all 方法,返回符合条件的标签列表。

示例:获取所有

标签

all_p_tags = soup.find_all('p')

for p in all_p_tags:

print(p.text)

按属性筛选多个标签(如找所有 href 以 https 开头的 标签 ):

a_tags = soup.find_all('a', href=lambda x: x and x.startswith('https'))

for a in a_tags:

print(a['href']) # 输出 https://example.com

2. 遍历文档树

◦ 子节点遍历:可通过 .children、.descendants 等属性。

示例:遍历 标签的直接子节点

body_tag = soup.find('body')

for child in body_tag.children:

if child.name: # 过滤换行等空白内容

print(child.name) # 输出 p、a 等标签名

◦ 父节点与祖先节点遍历:用 .parent、.parents 。

示例:找

标签的父节点

p_tag = soup.find('p')

print(p_tag.parent.name) # 输出 body

3. 修改文档内容

修改标签属性:直接赋值修改。

示例:修改 标签的 href 属性

a_tag = soup.find('a')

a_tag['href'] = 'https://new-example.com'

print(a_tag) # 输出 示例链接

◦ 修改标签内文本:通过 .string 或 .text (.text 会获取所有子文本并拼接 )。

示例:修改

标签文本

p_tag = soup.find('p')

p_tag.string = '修改后的段落内容'

print(p_tag) # 输出

修改后的段落内容

◦ 新增标签:用 new_tag 方法创建,再插入文档。

示例:在 内新增

new_h1 = soup.new_tag('h1')

new_h1.string = '新增标题'

body_tag = soup.find('body')

body_tag.append(new_h1)

print(body_tag) # 可看到新增的

以下以爬取某新闻网站(假设为简单静态页面,实际需遵守网站 robots.txt 规则和相关法律法规 )文章标题为例,结合 requests 和 BeautifulSoup :

1. 完整代码

import requests

from bs4 import BeautifulSoup

# 目标网页 URL,这里仅为示例,需替换为真实可访问地址

url = 'https://example-news-site.com'

response = requests.get(url, timeout=5) # 发送 GET 请求,设置超时

if response.status_code == 200: # 请求成功

soup = BeautifulSoup(response.text, 'lxml')

# 假设文章标题在 标签内,需按实际网页结构调整

title_tags = soup.find_all('a', class_='story-title')

for title_tag in title_tags:

print(title_tag.text.strip) # 去除文本前后空白并打印标题

else:

print(f'请求失败,状态码:{response.status_code}')

2. 代码说明

◦ 先用 requests.get 获取网页内容,设置 timeout 避免请求长时间挂起;

◦ 检查响应状态码,200 表示成功,再用 BeautifulSoup 解析响应文本;

◦ 通过 find_all 按标签名和属性找到文章标题标签,提取并清理文本后打印。

1. 解析器相关问题

◦ 报错 lxml not found:确保已安装 lxml 库,执行 pip install lxml 重新安装;若不想用 lxml,可将解析器换为 html.parser(即 soup = BeautifulSoup(html_doc, 'html.parser') )。

◦ 解析结果异常:不同解析器对不规范 HTML 处理有差异,优先尝试 lxml ,若仍有问题,可试试 html5lib(需额外安装 pip install html5lib ,它容错性强但速度稍慢 )。

2. 动态内容处理

若网页内容由 JavaScript 动态加载,BeautifulSoup 无法直接解析(它只处理静态返回的 HTML )。可结合 Selenium(自动化浏览器工具 )或 Pyppeteer(无头浏览器库 ),先模拟浏览器加载动态内容,再获取页面 HTML 给 BeautifulSoup 解析。

3. 属性与内容提取异常

◦ 当标签属性可能不存在时,提取 a['href'] 会报错,可先用 if 'href' in a.attrs 判断;

◦ 文本提取若包含大量空白或特殊字符,用 strip、正则等方式清理。

掌握以上内容,就能利用 BeautifulSoup 高效解析 HTML/XML ,无论是做简单数据提取,还是复杂的网页内容分析、修改,都能应对自如啦,快去实操试试吧~

来源:绿叶菜

相关推荐