Beautiful Soup 4是该库的最新版本,支持Python 3。
安装Beautiful Soup 4
首先,你需要安装Beautiful Soup 4以及一个解析器库,如lxml
或html5lib
。推荐使用lxml
因为它速度快,但html5lib
在处理错误百出的HTML时更加宽容。
pip install beautifulsoup4
pip install lxml # 或者 pip install html5lib
使用Beautiful Soup 4的基本步骤
解析一个文档:
- 使用
BeautifulSoup
构造函数来解析一个文档。
- 使用
导航至所需内容:
- 使用Beautiful Soup提供的方法,如
find()
和find_all()
来查找文档中的标签。
- 使用Beautiful Soup提供的方法,如
提取数据:
- 从找到的标签中提取文本、属性等数据。
代码示例
示例1:基本用法
from bs4 import BeautifulSoup
# 假设html_doc是一个HTML文档的字符串
html_doc = "<html><head><title>The Dormouse's story</title></head><body><p class='title'><b>The Dormouse's story</b></p></body></html>"
# 创建BeautifulSoup对象,传入HTML字符串和解析器
soup = BeautifulSoup(html_doc, 'lxml')
# 使用find()方法查找第一个<title>标签
title_tag = soup.find('title')
# 提取<title>标签的文本
print(title_tag.text) # 输出: The Dormouse's story
# 使用find_all()方法查找所有的<p>标签
paragraphs = soup.find_all('p')
# 遍历所有<p>标签并打印它们的文本
for p in paragraphs:
print(p.text) # 输出: The Dormouse's story
示例2:使用属性查找
# 假设我们想找到class属性为'title'的<p>标签
title_p = soup.find('p', class_='title')
# 打印标签的文本和HTML
print(title_p.text) # 输出: The Dormouse's story
print(title_p) # 输出: <p class="title"><b>The Dormouse's story</b></p>
示例3:使用CSS选择器
Beautiful Soup 4允许你使用CSS选择器来查找元素。
# 找到class为title的所有<strong>标签
strong_tags = soup.select('.title strong')
# 遍历并打印每个标签的文本
for tag in strong_tags:
print(tag.text) # 输出: The Dormouse's story
示例4:从网络URL获取HTML
import requests
# 获取网页内容
url = 'https://example.com'
response = requests.get(url)
# 解析网页内容
soup = BeautifulSoup(response.text, 'lxml')
# 现在你可以使用soup来查找和提取你需要的数据
示例5:处理编码问题
有时网页的编码可能不是UTF-8,Beautiful Soup可以处理这个问题。
from bs4 import UnicodeDammit
# 假设我们有一个带有不同编码的HTML文档
html_doc = "..."
# 让Beautiful Soup猜测编码
dammit = UnicodeDammit(html_doc)
# 创建BeautifulSoup对象
soup = BeautifulSoup(dammit.unicode_markup, 'lxml')