Parsing HTML with BeautifulSoup(使用 BeautifulSoup 解析 HTML)
在 Python Web Scraping(网页爬虫)中,获取网页 HTML 只是第一步。真正重要的是 解析 HTML 并提取我们需要的数据。
BeautifulSoup 是 Python 中最流行的 HTML 解析库之一,它可以帮助我们轻松从网页中提取信息。
什么是 BeautifulSoup
BeautifulSoup 是一个用于解析 HTML 和 XML 文档的 Python 库。
它可以将 HTML 文档转换成 树形结构(DOM Tree),从而方便我们查找和提取数据。
BeautifulSoup 常用于:
- 提取网页标题
- 获取文章内容
- 抓取图片链接
- 获取商品信息
- 解析新闻列表
安装 BeautifulSoup
首先需要安装 BeautifulSoup。
pip install beautifulsoup4
同时建议安装 lxml 解析器(速度更快):
pip install lxml
导入库:
from bs4 import BeautifulSoup
创建 BeautifulSoup 对象
通常我们会先使用 requests 获取网页 HTML。
示例:
import requests
from bs4 import BeautifulSoup
url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
print(soup)
这里:
response.text是网页 HTML"html.parser"是 Python 内置解析器
获取网页标题
获取 <title> 标签内容:
print(soup.title)
输出:
<title>Example Domain</title>
如果只想获取文本:
print(soup.title.text)
查找 HTML 元素
BeautifulSoup 提供了多种查找方法。
find()
查找 第一个匹配元素
soup.find("h1")
示例:
title = soup.find("h1")
print(title.text)
find_all()
查找 所有匹配元素
soup.find_all("a")
示例:
links = soup.find_all("a")
for link in links:
print(link.get("href"))
这段代码会输出所有链接。
根据属性查找
很多时候需要根据 class 或 id 查找元素。
示例 HTML:
<div class="article">
<h2>News Title</h2>
</div>
查找:
soup.find("div", class_="article")
注意:
class 是 Python 关键字,所以要写成:
class_
使用 CSS 选择器
BeautifulSoup 也支持 CSS 选择器。
使用 select():
soup.select("a")
查找 class:
soup.select(".article")
查找 id:
soup.select("#main")
示例:
links = soup.select("a")
for link in links:
print(link.text)
获取 HTML 属性
例如获取链接地址:
<a href="https://example.com">Visit</a>
Python:
link = soup.find("a")
print(link["href"])
或者:
print(link.get("href"))
获取文本内容
获取标签中的文本:
tag.text
示例:
paragraph = soup.find("p")
print(paragraph.text)
完整示例:抓取网页标题和所有链接
import requests
from bs4 import BeautifulSoup
url = "https://example.com"
headers = {
"User-Agent": "Mozilla/5.0"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
# 获取标题
print("网页标题:", soup.title.text)
# 获取所有链接
links = soup.find_all("a")
for link in links:
print(link.get("href"))
运行后会输出网页标题和所有链接。
BeautifulSoup 常用方法
| 方法 | 作用 |
|---|---|
| find() | 查找第一个元素 |
| find_all() | 查找所有元素 |
| select() | 使用 CSS 选择器 |
| get() | 获取属性 |
| text | 获取文本内容 |
BeautifulSoup 的优点
BeautifulSoup 受欢迎的原因:
- 简单易用
- 文档丰富
- 支持多种解析器
- 与 Requests 完美配合
- 非常适合初学者学习爬虫
总结
在 Python Web Scraping 中:
- Requests 用来获取网页 HTML
- BeautifulSoup 用来解析 HTML
- 提取网页中的数据
掌握 BeautifulSoup 后,你就可以开始编写真正的网页爬虫。