BeautifulSoup4 是一个强大的 Python 库,专门用于解析 HTML 和 XML 文档。它提供了简单易用的 API,让你轻松地从网页中提取所需的数据。
1. 安装 BeautifulSoup4
要开始使用 BeautifulSoup4,你需要先安装它。打开你的终端,输入以下命令:
bash
pip install beautifulsoup4
pip install lxml
lxml
是一个解析器,帮助 BeautifulSoup4 更高效地解析 HTML 文档。
2. 初始化 BeautifulSoup 对象
创建一个 BeautifulSoup
对象可以从一个字符串或文件开始:
ini
python
from bs4 import BeautifulSoup
# 从字符串创建
html_doc = """
<html>
<body>
<h1>欢迎来到示例页面</h1>
<p>这是一个示例段落。</p>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
# 从文件创建
# with open("example.html") as fp:
# soup = BeautifulSoup(fp, 'html.parser')
3. 常用 API
3.1 查询标签
-
通过标签名查询单个标签:
inipython title_tag = soup.find('h1') print(title_tag)
-
通过属性查询单个标签:
bashpython div_tag = soup.find('div', id='content') print(div_tag)
-
查询多个标签:
pythonp_tags = soup.find_all('p', class_='paragraph') print(p_tags)
3.2 提取标签内容
-
获取标签的文本内容:
pythonfor p_tag in p_tags: print(p_tag.text)
-
获取标签的属性值:
pythona_tag = soup.find('a') print(a_tag.get('href'))
3.3 使用 CSS 选择器
BeautifulSoup4 支持使用 CSS 选择器来查找标签:
python
# 查找 id 为 logo 的标签
logo_tag = soup.select('#logo')
print(logo_tag)
# 查找所有 div 标签
divs = soup.select('div')
print(divs)
3.4 格式化输出
可以使用 prettify()
方法来格式化输出 HTML 文档:
scss
python
print(soup.prettify())
4. 完整示例:爬取网页链接
以下示例演示如何使用 BeautifulSoup4 解析一个网页并提取所有链接的 href
属性:
python
import requests
from bs4 import BeautifulSoup
# 发送 HTTP 请求获取网页内容
url = 'https://example.com'
response = requests.get(url)
# 创建 BeautifulSoup 对象
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有链接
links = soup.find_all('a')
# 打印所有链接的 href 属性
for link in links:
print(link.get('href'))
实用案例:爬取小说目录
假设你想爬取一个小说网站的目录,可以使用以下代码:
python
import requests
from bs4 import BeautifulSoup
# 请求小说网站
url = 'https://example-novel.com'
response = requests.get(url)
# 解析 HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有章节链接
chapters = soup.select('.chapter-list a')
# 打印每个章节的标题和链接
for chapter in chapters:
title = chapter.text
href = chapter.get('href')
print(f"{title}: {href}")
性能指标
- 解析速度 :BeautifulSoup4 使用
lxml
解析器时,解析速度比使用内置的html.parser
快约 2-3 倍。 - 内存占用:BeautifulSoup4 在处理大型 HTML 文档时,内存占用相对较低,约为文档大小的 1.5 倍。
通过这些示例和 API,你可以轻松地使用 BeautifulSoup4 解析和提取网页数据。