制作 网络搜刮 用Python实现 BeautifulSoup, ,你需要两个库: requests 下载该网页,以及 beautifulsoup4 用于从HTML代码中提取数据。.
使用以下命令安装它们 pip install requests beautifulsoup4, ,然后按照下面的指南,一步一步地对网站进行数据抓取。.

使用 BeautifulSoup 在 Python 上进行刮擦的先决条件
在开始之前,你不必是专家。只要懂得阅读并执行脚本即可 Python 对于初学者来说,这已经绰绰有余了。.
以下是开始使用所需安装的内容:
- 安装 Python 以及一个开发环境。
- 安装 pip, ,这是一款只需一条命令即可添加 Python 库的工具。.
- 安装 BeautifulSoup :
pip install beautifulsoup4
请注意包名:在 PyPI, 没错 beautifulsoup4 需要编写的内容。你将导入到代码中的模块名为 bs4.
- 安装 Requests 下载网页:
pip install requests
- 安装 lxml (可选),BeautifulSoup 用于解析 HTML 的一个更快的解析器:
pip install lxml
如何使用 Python 和 BeautifulSoup 进行网络搜索?
以下是一个完整的项目,用于恢复 标题 一个网页以及所有 链接 其中包含的内容。.

步骤 1:通过请求检索页面内容
要下载一个网页,你需要发送一个 HTTP GET 请求 指向一个URL。这是该库的作用 Requests.
每次请求时,服务器都会返回一个 状态代码 它会告诉你一切是否顺利。需要了解的主要内容:
- 200 成功。
- 301 / 302 重定向。
- 404 未找到页面。
- 500 内部服务器错误。
和 Requests, 你可以通过该属性来验证该结果 .status_code. 下面是一个具体示例:这段代码会向某个网站发送请求,检查状态码,如果一切正常,则显示HTML内容的片段。.
进口请求
# 目标 URL
url = "https://bonjour.com"
# 发送 GET 请求
response = requests.get(url)
# 检查状态代码
if response.status_code == 200:
print("Success: the page has been retrieved!")
html = response.text # 页面的 HTML 内容
print("HTML 内容摘要:")
print(html[:500]) # 只显示前 500 个字符
else:
print(f "错误:状态代码 {response.status_code}")
步骤 2:使用 BeautifulSoup 分析 HTML 代码
当你使用 response.text, 你会得到一个简单的字符串:整个 HTML代码 来自该页面,但目前无法直接使用。为了方便操作,你可以创建一个对象 BeautifulSoup, ,它会将这种原始HTML转换为一种你可以浏览和分析的结构。.
始终表示一个 解析器, ,例如 "html.解析器. 此时,BeautifulSoup 会正确解析 HTML,且不会显示任何警告。你也可以使用 lxml, ,速度更快,需单独安装。.
从 bs4 导入 BeautifulSoup
导入请求
url = "https://bonjour.com"
response = requests.get(url)
html = response.text
# 建议指定解析器
soup = BeautifulSoup(html, "html.parser")
步骤 3:查找和提取元素
现在,HTML 已成为一个 BeautifulSoup 对象。你可以搜索并提取 数据 你感兴趣的,逐个标签查看。三种方法足以满足大多数需求。.
使用 find() 和 find_all()
查找() 返回 第一个要素 找到了。. find_all() 返回 全部名单 相应的元素。.
# 检索标题 <h1>
h1 = soup.find("h1")
print(h1.get_text())
# 读取所有链接 <a>
liens = soup.find_all("a")
for lien in liens:
print(lien.get_text(), lien.get("href"))
按属性定位元素
你可以根据某个 HTML 属性来细化搜索,例如 班级, ID 或者任何其他。. 要注意 : 在 Python 中,我们这样写 类别_ 和不 班级, ,以避免与该语言中的保留词发生冲突。.
# 获取具有特定 ID 的 div 元素
容器 = soup.find("div",)
# 获取所有具有特定类的链接
导航链接 = soup.find_all("a", class_="nav-link")
使用 select() 调用 CSS 选择器
若要进行更精准的搜索,可采用以下方法: 选择() 接受 CSS 选择器. 你可以精确定位页面中的某些部分,而无需手动遍历整个HTML代码。.
# 文章标题中的所有链接
article_links = soup.select("article h2 a")
# 全部 <a> 其 href 属性以 "http "开头。
links_http = soup.select('a[href^="http"]')
如何使用BeautifulSoup从HTML表格中提取数据?

实际应用场景通常比获取标题或链接要复杂得多。你需要处理……’结构化数据提取 与表格和列表一样,该 分页, ,以及数据抓取中常见的错误。.
提取表格和列表
网站通常以 HTML 表格 (<table>, <tr>, <th>, <td>)或 列表 (<ul/ 和 ). 要将这些结构转换为可用的数据,你需要逐行或逐元素地遍历它们。.
要提取一个 HTML表格原理很简单:
- 获取标头(
<th>) 来标识列标题。 - 遍历每一行(
<tr>) 并搜索单元格 (<td>) 其中包含相关数据。. - 将信息存储在列表或字典中。.
对于一个 HTML 列表 (<ul 在哪里 ) :
- 标记所有标签
和 find_all. - 提取其内容(文本或链接),并将其添加到Python列表中。.
下面是一个表格示例:
html = """
<table>
<tr>
<th>姓</th>
<th>年龄</th>
<th>镇</th>
</tr>
<tr>
<td>爱丽丝</td>
<td>25</td>
<td>巴黎</td>
</tr>
<tr>
<td>鲍勃</td>
<td>30</td>
<td>里昂</td>
</tr>
</table>
"""
# 创建 BeautifulSoup 对象
soup = BeautifulSoup(html, "html.parser")
# 从数组中提取标题
headers = [th.get_text(strip=True) for th in soup.find_all("th")] 头信息
print("Headers:", headers)
# 提取数据行(跳过第一行,因为这些是标题)
行 = []
for tr in soup.find_all("tr")[1:]:
cells = [td.get_text(strip=True) for td in tr.find_all("td")
if cells:
rows.append(cells)
print("Lines :", rows)
给你 find_all("th") 检索 页眉 和 find_all("td") 获取每一行的单元格。你遍历这些 <tr> 来逐行重建表格。
下面是一个基于列表的示例:
从 bs4 导入 BeautifulSoup
html_list = """
<ul
苹果</li
香蕉</li
橘子</li
</ul
"""
soup = BeautifulSoup(html_list, "html.parser")
# 从列表中读取项目
items = [li.get_text(strip=True) for li in soup.find_all("li")] 从列表中提取条目
print("Extracted list:", items) # ["苹果"、"香蕉"、"橙子"] #
每个 直接转换为 Python 列表元素, ,从而得到结果 ["苹果"、"香蕉"、"橙子"].
管理分页和链接
通常,数据无法全部显示在一页上。这些数据会通过链接分散在 “下一页” 或一个 编号分页 (?page=1, ?page=2, ,等等)。无论哪种情况,你都必须 卷曲 以检索所有页面并合并数据。.
以下是一个包含“page”参数的示例:
导入时间
导入请求
从 bs4 导入 BeautifulSoup
# 带分页的 URL 示例
base_url = "https://bonjour.com/articles?page={}"
HEADERS = {"User-Agent": "Mozilla/5.0"}
all_articles = []
# 假定有 5 个页面需要浏览
for page in range(1, 6):
url = BASE_URL.format(page)
r = requests.get(url, headers=HEADERS, timeout=20)
if r.status_code == 200:
soup = BeautifulSoup(r.text, "html.parser")
# 提取文章标题
articles = [h2.get_text(strip=True) for h2 in soup.find_all("h2", class_="title")] All_articles.extend(articles)
all_articles.extend(articles)
else:
print(f "页面 {page} 出错(代码:{r.status_code})")
time.sleep(1.0) # politeness
print("Articles retrieved:", all_articles)
简要的分步说明:
- 准备好’网址 带一个车位
{}用于插入页码。.
BASE_URL = "https://bonjour.com/articles?page={}
- 某些网站会屏蔽没有浏览器标识的请求。添加一个 User-Agent 避免被误认为是机器人。.
headers = {"User-Agent": "Mozilla/5.0"}
requests.get(url, headers=headers)
- 页面循环 1 至 5.
for page in range(1, 6):
- 使用以下代码获取页面的HTML内容: requests.
requests.get(url)
- 如果网站没有响应,则限制等待时间(20秒超时).
requests.get(url, timeout=20)
- 使用以下工具分析该页面 BeautifulSoup.
BeautifulSoup(response.text, "html.parser")
- 获取所有 文章标题.
find_all("h2", class_="title")
- 将找到的文章添加到总列表中。.
all_articles.extend(articles)
- 输入一个 断裂 在每次请求之间留出间隔,以免给服务器造成过载并避免被封禁。.
time.sleep(1.0)
循环之后 所有文章 载有 全部 5 页标题.
常见错误和挑战
数据抓取可不只是按个按钮那么简单。你会经常遇到以下障碍:
- HTTP 错误 : 404 (页面未找到),, 403 (禁止进入)和 500 (服务器端错误)。.
管理示例:
response = requests.get(url)
if response.status_code == 200:
print("页面已成功获取")
elif response.status_code == 404:
print("错误:页面不存在")
else:
print("返回状态码:", response.status_code)
- 阻止刮擦的网站 :有些会检测到自动请求并阻止访问。.
- 动态页面(JavaScript) : BeautifulSoup 只读 静态HTML. 如果页面通过 JavaScript 加载内容,你将看不到任何内容。在这种情况下,你需要使用诸如 Selenium 在哪里 Playwright.
为了高效地进行网页抓取,同时避免被封禁或破坏网站,请遵循以下最佳实践:
- 遵守 robots.txt 文件 你要分析的网站。.
- 实施 期限 在查询之间使用
time.sleep()以免给服务器造成过载。. - 使用 代理 并让它们转起来。.
- 定期更换你的 User-Agent.
如何使用 Selenium 和 BeautifulSoup 对网络进行扫描?

Selenium 控制真实浏览器, ,执行JavaScript并以与人类浏览时相同的方式显示页面。. BeautifulSoup 随后在页面完全渲染后分析HTML,并提取你所需的所有数据。.
第 1 步:安装 Selenium 和 BeautifulSoup
在这里,与其说…… requests, ,你使用的是 Selenium 以获取页面内容。使用以下命令安装这两个库:
pip install selenium beautifulsoup4
接下来,你需要下载一个 WebDriver 已适配你的浏览器版本。对于谷歌Chrome浏览器,则是 ChromeDriver. 你有两种选择:将其放在与你的 Python 脚本相同的文件夹中,或者将其’添加到环境变量 PATH 中 你的系统。.
步骤 2:配置 Selenium
首先导入 webdriver 通过Selenium控制浏览器。.
from selenium import webdriver
from selenium.webdriver.common.by import By
接着启动一个浏览器。正是它打开了该页面,并且 执行 JavaScript, ,这里是Chrome。.
driver = webdriver.Chrome()
告知浏览器该 网址 参观。.
driver.get("https://www.exemple.com")
如果页面加载某些元素需要较长时间,你可以让Selenium等待最多 10 秒钟.
driver.implicitly_wait(10)
步骤 3:检索页面内容
页面加载完成后,你获取 完整 DOM :执行 JavaScript 后生成的 HTML 源代码。.
html_content = driver.page_source
步骤 4:使用 BeautifulSoup 进行 HTML 分析
现在将这段源代码传递给 美丽汤 要利用它:
from bs4 import BeautifulSoup
# 创建一个 BeautifulSoup 对象
soup = BeautifulSoup(html_content, 'html.parser')
# 示例:获取页面中的所有标题
titres = soup.find_all('h2')
for titre in titres:
print(titre.get_text())
BeautifulSoup 提供了诸如以下这些强大的方法: find(), find_all() 以及用于 定位和提取 HTML中的具体元素。.
步骤 5:关闭浏览器
非常重要:执行完毕后请务必关闭浏览器,以便 释放资源.
driver.quit()
这样,你就将……的强大功能结合在一起 Selenium 为了 模拟人类导航 (点击、滚动)结合BeautifulSoup高效的HTML解析能力。这是抓取通过JavaScript加载数据的网站的理想方法。.
常见问题
用 Python 进行网络搜索的最佳工具是什么?
没有……’刮刀 并非通用的,而是更适合你项目的解决方案。以下是使用最广泛的三个:
- BeautifulSoup :简单高效,可分析HTML并快速提取内容。如果你是初学者或正在处理小型项目,这是理想的选择。.
- Scrapy :一个功能全面的框架,专为管理 海量数据 并具备高级功能。.
- Playwright : 非常适合处理由JavaScript生成的复杂网站。它能模拟真实的浏览器,并像人类一样与网页进行交互。.
如何使用 BeautifulSoup 提取 div 标签中的内容?
和 BeautifulSoup, 你可以通过一个 CSS 选择器. 要提取标签中的内容 <div>, 请按照以下步骤操作。.
1. 使用以下方式获取网页: requests, ,然后使用 BeautifulSoup.
from bs4 import BeautifulSoup
import requests
url = "URL_DE_TON_SITE" # Remplace par l'URL réelle
reponse = requests.get(url)
html_content = reponse.text
soup = BeautifulSoup(html_content, "html.parser")
2. 使用该方法 选择() 使用你的 CSS 选择器来定位该标签 <div>.
要获取第一个元素,请使用 soup.select_one. 要获取所有元素,请使用 汤.选择. 以下是一个 HTML 代码示例:
<div>
<h2>Titre de l'article</h2>
<p>Voici le contenu du paragraphe.</p>
</div>
下面是一个使用 CSS 选择器的示例 div.article :
# Récupérer le premier div avec la classe "article"
div_article = soup.select_one("div.article")
# Afficher son contenu texte
if div_article:
print(div_article.get_text(strip=True))
3. 取出内部的物品 <div>.
# Récupérer le titre à l'intérieur du div
titre = soup.select_one("div.article h2").get_text()
# Récupérer le paragraphe à l'intérieur du div
paragraphe = soup.select_one("div.article p").get_text()
print("Titre :", titre)
print("Paragraphe :", paragraphe)
如何一起使用 Requests 和 BeautifulSoup?
这两个库是 其他 :一个负责加载页面,另一个负责分析页面。.
1. requests 发送一个HTTP请求并下载该 原始HTML代码 的页面。
import requests
url = "https://sitecible.com"
response = requests.get(url) # requête HTTP
print(response.text) # affiche le HTML brut
目前,你只有一段布满标签的冗长文本(<html>, <div>, <p>等等)。
2. BeautifulSoup 分析这段原始HTML代码,并将其转换为一个 有组织的结构. 然后,你可以浏览该页面,定位标签并提取数据。.
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, "html.parser") # analyse le HTML
titre = soup.find("h1").get_text() # extrait le contenu d'un <h1>
print(titre)
为什么我的网络搜刮代码在某些网站上不起作用?
有时你的脚本可能无法获取任何内容。某些网站不会直接以HTML格式提供全部内容:它们使用 JavaScript 以动态加载数据。然而,, BeautifulSoup 无法分析 JavaScript 生成的数据. 在这种情况下,你需要借助诸如 Playwright 在哪里 Selenium.
BeautifulSoup 在网络搜刮中扮演什么角色?
BeautifulSoup 扮演……的角色’HTML 解析器. 它将页面代码转换为一个结构化的对象,你可以轻松地遍历它。简而言之,这就是 在原始HTML和你的Python代码之间进行转换的工具.
网页抓取:BeautifulSoup 还是 Scrapy?
BeautifulSoup 和 Scrapy 确实截然不同,尽管两者都用于 网络搜刮.
| BeautifulSoup | Scrapy |
|---|---|
| 一个仅用于解析 HTML 和提取数据的简单库。 | 一个功能齐全的框架,可管理整个爬取流程:请求、链接追踪、分页、数据导出及错误处理。. |
BeautifulSoup 是入门的不二之选:它让’用 Python 提取 HTML 数据 简单快捷。.
如果你希望尽可能减少代码部分,那么该工具 亮数据 提供可直接使用的数据集,以减少编码工作量。.





