BeautifulSoup是一个Python库,用于从HTML或XML文件中提取数据。它创建了一个解析树,用于遍历HTML或XML文档,从中提取数据。以下是使用BeautifulSoup库来解析HTML和XML文档的基本步骤:
1. 安装BeautifulSoup
首先,你需要安装BeautifulSoup和lxml(或其他解析器,如html.parser, html5lib)。lxml是一个高效的HTML和XML解析库,它常与BeautifulSoup一起使用。
bash复制代码
pip install beautifulsoup4 lxml |
2. 导入库
在你的Python脚本中,你需要导入BeautifulSoup
类以及用于加载HTML或XML文档的库(如requests
用于从网络获取数据,open
函数用于从文件加载数据)。
python复制代码
from bs4 import BeautifulSoup | |
# 如果从文件加载 | |
with open('example.html', 'r', encoding='utf-8') as file: | |
html_doc = file.read() | |
# 如果从网络加载 | |
# import requests | |
# response = requests.get('http://example.com') | |
# html_doc = response.text |
3. 创建BeautifulSoup对象
使用上面获取的HTML或XML文档创建一个BeautifulSoup
对象。你需要指定一个解析器,如lxml
、html.parser
或html5lib
。
python复制代码
soup = BeautifulSoup(html_doc, 'lxml') |
4. 解析HTML/XML
现在,你可以使用BeautifulSoup
对象来解析HTML/XML文档了。你可以通过标签名、类名、ID、属性等来搜索元素。
- 通过标签名搜索:
python复制代码
tags = soup.find_all('a') # 查找所有的<a>标签 |
- 通过类名搜索:
python复制代码
tags = soup.find_all(class_='classname') # 注意class_作为参数名,因为class是Python的关键字 |
- 通过ID搜索:
python复制代码
tag = soup.find(id='unique-id') # 查找ID为'unique-id'的标签 |
- 通过属性搜索:
python复制代码
tags = soup.find_all(attrs={"data-custom": "value"}) # 查找具有特定属性的标签 |
5. 访问元素内容
你可以通过.string
或.text
属性来访问标签内的文本内容,或者使用.get()
方法访问标签的属性。
python复制代码
for tag in tags: | |
print(tag.text) # 打印标签内的文本 | |
print(tag.get('href')) # 打印<a>标签的href属性值 |
6. 遍历文档
BeautifulSoup
对象是一个树形结构,你可以使用.children
、.descendants
、.parent
、.next_sibling
、.previous_sibling
等方法来遍历文档。
7. 修改文档
虽然BeautifulSoup
主要用于解析和提取数据,但你也可以用它来修改HTML/XML文档。你可以添加、修改或删除标签及其内容。
示例代码
python复制代码
from bs4 import BeautifulSoup | |
html_doc = """ | |
<html><head><title>The Dormouse's story</title></head> | |
<body> | |
<p class="title"><b>The Dormouse's story</b></p> | |
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a> | |
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> | |
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a> | |
</body> | |
</html> | |
""" | |
soup = BeautifulSoup(html_doc, 'lxml') | |
# 查找所有<a>标签并打印其href属性 | |
for link in soup.find_all('a'): | |
print(link.get('href')) |
以上是使用BeautifulSoup库来解析HTML文档的基本方法。你可以根据自己的需求调整搜索条件和遍历方式。