Python 第三方库:Beautiful Soup(HTML/XML 解释提取)

发布于:2025-08-30 ⋅ 阅读:(16) ⋅ 点赞:(0)

Beautiful Soup 是一个 用于从 HTML 和 XML 文件中提取数据的 Python 第三方库。它为复杂的网页结构提供了简单易用的解析接口,尤其适合网页爬虫和数据提取任务。Beautiful Soup 提供树型结构访问、标签搜索、属性提取等功能,并支持多种解析器(如 html.parser、lxml、html5lib)。

底层原理是将网页结构转为“导航树”,用户可以像操作 DOM 一样获取任意节点信息。

安装:

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:基本解析和标签获取

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:查找所有特定标签

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 选择器查找元素

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

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:遍历父节点、子节点、兄弟节点

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(容错性最好,最接近浏览器行为)

安装方法:

pip install beautifulsoup4 lxml

2、配合 requests 使用是最常见的爬虫组合:

import requestsfrom bs4 import BeautifulSoup
url = "https://example.com"html = requests.get(url).textsoup = BeautifulSoup(html, "lxml")

图片

“点赞有美意,赞赏是鼓励”