在本章中,我们将通过一个完整的示例快速上手BeautifulSoup,让你立即开始网页解析和数据提取。
下面是一个完整的Python脚本,演示如何使用BeautifulSoup解析HTML并提取数据:
# 导入BeautifulSoup库
from bs4 import BeautifulSoup
# 定义要解析的HTML内容(这里使用简单的示例HTML)
html_content = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的第一个网页</title>
</head>
<body>
<h1 id="main-title">欢迎学习BeautifulSoup</h1>
<div class="content">
<p class="intro">这是一个用于演示的示例页面。</p>
<ul id="list">
<li class="item">第一项</li>
<li class="item">第二项</li>
<li class="item">第三项</li>
</ul>
<a href="https://www.example.com" class="link">示例链接</a>
</div>
</body>
</html>
"""
# 创建BeautifulSoup对象,使用lxml解析器
soup = BeautifulSoup(html_content, 'lxml')
# 示例1:获取整个HTML的格式化输出
print("=== 格式化HTML输出 ===")
print(soup.prettify())
# 示例2:获取标题文本
print("\n=== 网页标题 ===")
print(soup.title.string)
# 示例3:获取h1标签的文本
print("\n=== 主标题 ===")
print(soup.h1.text)
# 示例4:通过id获取元素
print("\n=== 通过id获取元素 ===")
main_title = soup.find(id="main-title")
print(f"ID为main-title的元素: {main_title.text}")
# 示例5:通过class获取所有元素
print("\n=== 通过class获取所有li元素 ===")
items = soup.find_all(class_="item")
for i, item in enumerate(items, 1):
print(f"第{i}个li元素: {item.text}")
# 示例6:获取特定属性
print("\n=== 获取链接的href属性 ===")
link = soup.find('a', class_="link")
print(f"链接地址: {link.get('href')}")
# 示例7:获取父元素和子元素
print("\n=== 父元素和子元素 ===")
ul = soup.find('ul', id="list")
print(f"ul元素的父元素: {ul.parent.name}")
print(f"ul元素的子元素数量: {len(ul.children)}")
# 示例8:使用CSS选择器
print("\n=== 使用CSS选择器 ===")
intro_paragraph = soup.select_one('p.intro')
print(f"CSS选择器找到的段落: {intro_paragraph.text}")
运行上述代码,你将看到如下输出:
=== 格式化HTML输出 ===
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<title>
我的第一个网页
</title>
</head>
<body>
<h1 id="main-title">
欢迎学习BeautifulSoup
</h1>
<div class="content">
<p class="intro">
这是一个用于演示的示例页面。
</p>
<ul id="list">
<li class="item">
第一项
</li>
<li class="item">
第二项
</li>
<li class="item">
第三项
</li>
</ul>
<a class="link" href="https://www.example.com">
示例链接
</a>
</div>
</body>
</html>
=== 网页标题 ===
我的第一个网页
=== 主标题 ===
欢迎学习BeautifulSoup
=== 通过id获取元素 ===
ID为main-title的元素: 欢迎学习BeautifulSoup
=== 通过class获取所有li元素 ===
第1个li元素: 第一项
第2个li元素: 第二项
第3个li元素: 第三项
=== 获取链接的href属性 ===
链接地址: https://www.example.com
=== 父元素和子元素 ===
ul元素的父元素: div
ul元素的子元素数量: 7
=== 使用CSS选择器 ===
CSS选择器找到的段落: 这是一个用于演示的示例页面。
from bs4 import BeautifulSoup
首先需要导入BeautifulSoup类。
soup = BeautifulSoup(html_content, 'lxml')
将HTML内容传递给BeautifulSoup构造函数,并指定使用'lxml'解析器。
| 方法 | 描述 | 示例 |
|---|---|---|
soup.find() |
查找第一个匹配的元素 | soup.find('h1') |
soup.find_all() |
查找所有匹配的元素 | soup.find_all('li') |
.text 或 .string |
获取元素的文本内容 | soup.title.string |
.get() |
获取元素的属性值 | link.get('href') |
.prettify() |
格式化输出HTML | soup.prettify() |
soup.select() |
使用CSS选择器查找元素 | soup.select('p.intro') |
find_all()查找特定class的所有元素将下面的HTML添加到你的代码中并尝试解析:
<div class="article">
<h2>文章标题</h2>
<p class="author">作者: 张三</p>
<p class="date">发布日期: 2024-01-15</p>
<p class="content">这是文章内容...</p>
</div>