您是否想潜入...... 网络搜刮 但又不会被复杂的代码所困扰?
和 Python 和图书馆 美丽汤,你可以轻松地 提取和整理数据 仅用几句话就能概括一个网站。

使用 BeautifulSoup 在 Python 上进行刮擦的先决条件
✅ 在开始之前,掌握以下几点至关重要: 编程基础.这将让您更好地了解代码是如何工作的。 不必成为专家,但懂得阅读和执行Python脚本会对你大有帮助。
接下来,您首先需要做的是 使 在 Python 上进行刮擦 与 BeautifulSoup :
- ✔ 安装 Python 以及一个开发环境。
- ✔ 安装
核心, 这款工具可轻松添加 Python 库。 - ✔ 安装 美丽汤 使用命令 :
pip install beautifulsoup4
- ✔ 安装 要求 命令来检索网页:
pip install requests
如何使用 Python 和 BeautifulSoup 进行网络搜索?
请按照我们的教程进行简单的网络搜索项目。

项目 获取页面标题及其包含的所有链接。
步骤 1:通过请求检索页面内容
开展 HTTP GET 请求 到 URL,使用 要求.
使用请求发送 HTTP 请求时,服务器总是会返回一个状态代码。这些代码表示请求是否成功。
200 成功。
301 / 302 重定向。
404 未找到页面。
500 内部服务器错误。
.status_code.下面是一个向以下设备发送请求的代码示例 bonjour.com会检查状态代码,并在一切正常的情况下显示 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 代码的字符串。要轻松操作这些 HTML 代码,我们可以使用 美丽汤 创建对象 美丽汤."html.解析器这使得BeautifulSoup能够正确解析HTML并避免警告。从 bs4 导入 BeautifulSoup
导入请求
url = "https://bonjour.com"
response = requests.get(url)
html = response.text
# 建议指定解析器
soup = BeautifulSoup(html, "html.parser")
步骤 3:查找和提取元素
- 使用
查找()和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"))
- 按属性定位元素
您可以通过以下属性缩小搜索范围 班级, ID 或任何其他 HTML 属性。
⚠️ 评论 在 Python 中,我们写道 类别_ 代替 班级 以避免与保留字 班级.
# 检索具有特定 id 的 div
container = soup.find("div", id="main")
# 检索具有特定类的所有链接
nav_links = soup.find_all("a", class_="nav-link")
- 使用 CSS 选择器
选择()
要进行更精确的搜索,请使用 选择() 使用 CSS 选择器。
# 文章标题中的所有链接
article_links = soup.select("article h2 a")
# 全部 <a> 其 href 属性以 "http "开头。
links_http = soup.select('a[href^="http"]')
这 CSS 选择器 如果想精确定位页面中的某些部分而不必手动遍历整个HTML代码,这些方法非常强大。
如何使用BeautifulSoup从HTML表格中提取数据?

到目前为止,我们已经了解了如何从网页中提取标题、链接或文本。
⚠ 但实际应用场景往往更为复杂: 结构化数据提取 例如表格或列表的处理、分页管理,以及解决与网页抓取相关的常见错误。这正是我们将要共同探讨的内容。
提取表格和列表
网站通常以 HTML 表格 (<table>, <tr>, <th>, <td>)或 列表 (
- /
- )。要将这些结构转化为可用数据,您需要学习如何逐行或逐个元素地查看它们。
无论何时 提取 HTML 表格原理很简单:
- ✅ 恢复标头 (
<th>) 来标识列标题。 - ✅ 浏览每一行 (
<tr>) 并搜索单元格 (<td>),其中包含真实数据。 - ✅ 在列表或字典中存储信息。
对于一个 HTML 列表 (
- 或
- ) :
- ✅ 找到所有标签
和查找全部. - ✅ 检索其内容(文本或链接)并将其添加到 Python 列表中。
总之 :
标签
<table>,<tr>,<th>,<td>用于重建表格。
标签<ul/,用于将 HTML 列表转换为 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 列表项,结果是["苹果"、"香蕉"、"橙子"].管理分页和链接
通常情况下,数据不适合放在一页纸上。使用 “下一页” 或一个 编号分页 (页=1,页=2,......)。
在这两种情况下,您必须 卷曲 (循环浏览)来获取所有页面并合并数据。
带有页面参数的示例 :
导入时间 导入请求 从 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)简要说明:
- 准备URL时使用位置{}来插入页面编号。
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.get(url)- 如果网站没有回应,则限制等待时间。
requests.get(url, timeout=20)- 解析器 la 页面。
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("Page retrieved successfully") elif response.status_code == 404: print("Error: page not found") else: print("Code returned:", response.status_code)- 阻止刮擦的网站
某些系统会检测自动请求并阻止访问。
- 动态页面(JavaScript)
BeautifulSoup 只能读取静态 HTML。如果页面加载其 内容与 JavaScript你什么也看不到。
在这种情况下,使用以下工具 硒 在哪里 编剧.
但是,如果您想在不被阻止或不损害网站的情况下有效地进行刮擦,以下是最佳做法:
- ✔ 尊重 robots.txt 文件 一个网站。
- ✔ 设置 期限 以避免服务器超载(使用 time.sleep())。
- ✔ 使用 代理 并旋转它们。
- ✔ 定期更换您的 用户代理.
如何使用 Selenium 和 BeautifulSoup 对网络进行扫描?

在 Chrome 浏览器上使用 Selenium 和 BeautifulSoup 进行网络刮擦。Cristina for Alucare.fr ⚠ 提醒 BeautifulSoup 是一款出色的 HTML 解析器,但它无法执行网页中的 JavaScript。这时 Selenium 就成了你的得力助手!
基本上,硒 控制真实浏览器它执行 JavaScript 并显示页面,就像人在浏览一样。页面完全呈现后,BeautifulSoup 将解析 HTML 代码。因此,您可以提取您想要的内容。
第 1 步:安装 Selenium 和 BeautifulSoup
在这里,我们将使用 硒要安装它,必须通过 核心.
pip install selenium beautifulsoup4接下来,您需要下载并安装 WebDriver 与浏览器版本相对应(例如,ChromeDrive 适用于 Google Chrome 浏览器)。
✅ 您可以将其放置在与 Python 脚本相同的文件夹中,或者将其添加到环境变量 PATH 中 您的系统。
步骤 2:配置 Selenium
首先,您需要导入 webdriver 来控制浏览器。
from selenium import webdriver from selenium.webdriver.common.by import By随后启动浏览器。它将打开网页并 将执行 JavaScript (例如:Chrome 浏览器)。
driver = webdriver.Chrome()您告诉浏览器要访问哪个页面。
driver.get("https://www.exemple.com")如果页面显示某些元素需要时间,您可以让Selenium稍等片刻。
driver.implicitly_wait(10)步骤 3:检索页面内容
页面加载完毕后,您可以检索 完整 DOM (执行 JS 后的 HTML 源代码)。
html_content = driver.page_source步骤 4:使用 BeautifulSoup 进行 HTML 分析
现在将此源代码传递给BeautifulSoup以便进行处理:
from bs4 import BeautifulSoup # 创建 BeautifulSoup 对象 soup = BeautifulSoup(html_content, 'html.parser') # 示例:获取页面上的所有标题 titles = soup.find_all('h2') for title in titles: print(title.get_text())👉 BeautifulSoup 提供了强大的方法,如 find()、find_all() 和 CSS 选择器,可用于 目标 和 提取元素 HTML 代码。
步骤 5:关闭浏览器
非常重要:执行后请务必关闭浏览器以释放资源!
driver.quit()✅ 就是这样!现在,您可以将 Selenium 的强大功能与 模拟人类导航 (点击、滚动等)与BeautifulSoup在HTML代码解析方面的效率相结合。
常见问题
用 Python 进行网络搜索的最佳工具是什么?
实际上并不存在真正的最佳通用工具,而是根据您的项目量身定制的解决方案。
🔥 美丽汤 HTML 解析器:简单有效,可快速分析 HTML 并提取内容。如果你刚起步或有小型项目,它是你的理想选择。
🔥 废料 这是一个完整的框架,旨在通过先进功能管理海量数据。
🔥 编剧 : 非常适合由JavaScript生成的复杂网站,因为它模拟真实浏览器,并能像人类一样与页面进行交互。
如何使用 BeautifulSoup 从标签中提取内容 <div> ?
使用 BeautifulSoup,您可以使用 CSS 选择器.要从 <div>步骤如下
- 使用 Requests 检索页面,然后使用 BeautifulSoup 进行分析
从 bs4 导入 BeautifulSoup 导入请求 url = "URL_OF YOUR_SITE" # 替换为真实 URL response = requests.get(url) html_content = response.text soup = BeautifulSoup(html_content, "html.parser")- 使用
选择()标签,将您的 CSS 选择器传递给它,使其针对<div>
要检索第一个项目,请使用
soup.select_one要检索所有项目,请使用
汤.选择HTML 示例:
<div class="article"> <h2>文章标题</h2> <p>该段是这样说的</p> </div>使用 CSS 的示例:
# 读取第一个带有 "article "类的 div div_article = soup.select_one("div.article") # 显示其文本内容 print(div_article.get_text(strip=True))这里的 CSS 选择器是
div.article.- 提取内部元素
<div>
# 检索 div 中的标题 title = soup.select_one("div.article h2").get_text() # 从 div 中读取段落 paragraph = soup.select_one("div.item p").get_text() print("Title:", title) print("Paragraph:", paragraph)如何一起使用 Requests 和 BeautifulSoup?
这两个图书馆相辅相成。
- Requests 通过 HTTP 请求获取网页内容。
它向目标网站发送 HTTP 请求,下载页面的原始 HTML 代码。
进口请求 url = "https://sitecible.com" response = requests.get(url) # HTTP 请求 print(response.text) # 显示原始 HTML 代码在这一阶段,你所拥有的只是一个充满标记的巨大文本 (<html>,<div><p>等等)。
- BeautifulSoup 会分析这些 HTML 内容,提取您感兴趣的内容。
它将原始HTML转换为有组织的结构。通过这种方式,您可以轻松地在HTML内部进行导航:定位、提取和获取数据。
从 bs4 导入 BeautifulSoup soup = BeautifulSoup(response.text, "html.parser") # 解析 HTML title = soup.find("h1").get_text() # 提取了一个 <h1> print(title)为什么我的网络搜刮代码在某些网站上不起作用?
您的脚本可能无法检索到任何内容,因为有些网站并不直接以 HTML 格式提供所有内容。
这些网站使用JavaScript动态加载数据。然而,BeautifulSoup无法实现分析 JavaScript 渲染的数据.
在这种情况下,您应该使用以下工具 编剧 在哪里 硒.
BeautifulSoup 在网络搜刮中扮演什么角色?
BeautifulSoup扮演着HTML 解析器.
它将页面源代码以纯文本形式获取,并将其转换为结构化对象,便于您轻松浏览。
如果没有这个库,您将看到一大块无法阅读的文本。简而言之,BeautifulSoup 是在 普通 HTML 和您的 Python 代码.
网络搜刮:BeautifulSoup 与 Scrapy?
美丽汤 和 废料 虽然两者都用于网络搜刮,但却截然不同。
美丽汤 废料 一个仅用于解析 HTML 和提取数据的简单库。 管理整个搜索过程的完整框架
(查询、链接跟踪、分页、数据导出、错误管理)。简而言之,BeautifulSoup 使...变得更容易。用 Python 提取 HTML 数据.该库非常适合初学者,因为它能让刮削变得快速而简单。
否则,如果您不想 无编码, 功能全面的工具 亮数据 也是网络搜刮的绝佳解决方案。
现在,请在评论中告诉我们你都搜刮到了什么!
- ✅ 找到所有标签
- 与
- ✅ 恢复标头 (
- 、





