Beautiful Soup 是一个 用于从 HTML 和 XML 文件中提取数据的 Python 第三方库。它为复杂的网页结构提供了简单易用的解析接口,尤其适合网页爬虫和数据提取任务。Beautiful Soup 提供树型结构访问、标签搜索、属性提取等功能,并支持多种解析器(如 html.parser、lxml、html5lib)。
底层原理是将网页结构转为"导航树",用户可以像操作 DOM 一样获取任意节点信息。
安装:
nginx
pip install beautifulsoup4
常见应用场景:
(1)网页爬虫中的 HTML 内容解析。
(2)网页结构分析与标签提取。
(3)XML 数据解析。
(4)网站信息清洗与提取(如新闻、价格、评论等)。
(5)教学演示 HTML/XML 树结构解析过程。
◆ ◆ ◆
核心概念
1、BeautifulSoup 对象
将 HTML 文本转化为树形结构的解析对象,是所有操作的入口。
2、标签(Tag)
对应 HTML/XML 中的每个元素节点。
3、NavigableString
HTML 中的文本部分。
4、属性字典(attrs)
标签的属性信息(如 href,class 等)。
5、解析器选择
支持内建的 html.parser,以及更强大的 lxml、html5lib。
◆ ◆ ◆
应用举例
例 1:基本解析和标签获取
python
from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')print(soup.title) # 输出:<title>Example</title>print(soup.title.string) # 输出:Exampleprint(soup.a['href']) # 输出:链接地址
例 2:查找所有特定标签
python
from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')links = soup.find_all('a')for link in links: print(link.get('href')) # 输出:http://example.com
例 3:使用 CSS 选择器查找元素
python
from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')items = soup.select("p.title a") # 类似 jQuery 的语法for item in items: print(item.text) # 输出:Example Link
例 4:提取属性、类名、ID
python
from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')tag = soup.find('p', class_='title')print(tag['class']) # 输出:['title']print(tag.get('class')) # 同上
例 5:遍历父节点、子节点、兄弟节点
python
from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')a_tag = soup.a # 相当于 soup.find("a")print(a_tag.parent.name) # 父标签print(a_tag.next_sibling) # 下一个兄弟节点
◆ ◆ ◆
常用方法与属性
BeautifulSoup(markup, parser)
构建解析对象。
参数:
markup:HTML/XML 字符串或文件对象
parser:解析器类型(如 'html.parser', 'lxml')
返回:BeautifulSoup 对象
find(name, attrs, recursive, string, **kwargs)
查找第一个匹配的标签。
参数:
name:标签名
attrs:属性字典
string:文本内容匹配
返回:Tag 对象或 None
find_all(name, attrs, string, limit, **kwargs)
查找所有匹配标签。
参数:
同上,可加 limit 限制个数
返回:包含多个 Tag 的列表(list)
select(selector)
使用 CSS 选择器查找节点。
参数:
selector:如 "div > a.title"
返回:符合条件的 Tag 列表(list)
get_text(strip=False)
获取标签内所有文本。
参数:
strip:是否去除首尾空白
返回:字符串
contents / children
访问子节点。
返回:
contents 是列表
children 是生成器
parent / parents
访问父节点或所有祖先节点。
返回:Tag 或迭代器
next_sibling / previous_sibling
访问兄弟节点。
返回:Tag 或文本节点
attrs
访问标签属性。
返回:字典 {属性名: 属性值}
◆ ◆ ◆
补充说明
1、推荐解析器:
html.parser(标准库,自带)
lxml(速度快,需安装)
html5lib(容错性最好,最接近浏览器行为)
安装方法:
nginx
pip install beautifulsoup4 lxml
2、配合 requests 使用是最常见的爬虫组合:
java
import requestsfrom bs4 import BeautifulSoup
url = "https://example.com"html = requests.get(url).textsoup = BeautifulSoup(html, "lxml")

"点赞有美意,赞赏是鼓励"