使用 Beautiful Soup 进行网页抓取

发布日期:2026-07-20 00:58:03  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-20 00:58:03  
0

介绍

Web 抓取是从 HTML/XML 内容中提取结构化数据的特定信息的过程。数据科学家和研究人员通常需要从众多网站获取和提取数据,以创建数据集、测试或训练算法、神经网络和机器学习模型。通常,网站会提供API,这是获取结构化数据的最佳方式。但是,有时没有可用的 API,或者您想绕过注册过程。在这种情况下,只能通过网页访问数据。在处理与网站相关的动态数据(如股票、招聘信息、酒店预订、房地产等)时,手动过程可能非常繁琐且耗时,这些数据需要经常访问。Python 通过各种模块提供了一种自动化的方法,可以从网络(URL/URI)获取 HTML 内容并提取数据。本指南将详细介绍使用beautifulsoup模块进行 Web 抓取的过程。

网页抓取流程

抓取过程包括以下步骤:

  1. 通过 URL 使用请求模块发出请求。

  2. 以文本形式检索 HTML 内容。

  3. 仔细检查 HTML 结构以确定要从中提取数据的特定 HTML 元素。为此,请在浏览器中右键单击网页并选择检查选项以查看结构。

在 Safari 中,通过Safari -> 偏好设置 -> 高级 -> 在栏中显示开发菜单启用开发者选项

  1. 使用BeautifulSoup从响应中查找特定元素并提取文本。

按照Python 中的 Web 请求指南来了解如何使用 Python 发出 Web 请求。

HTML 和 CSS 基础知识

通过 URL 发出的 HTTP 请求将通过 HTML 网页得到响应。HTML 和 XML 都是标记语言,用于定义使用标签格式化文本的方式。HTML 内容还可以在style标签内包含 CSS 指令,以添加浏览器解释的各种样式和装饰,从而应用格式化。以下是典型 HTML 页面的常见示例:

      <!DOCTYPE html>               --> 1
<html>                        --> 2
  <head>                      --> 3
    <title>List of Game Engines</title>
    <style type="text/css">   --> 4
      table, th, td{
        border: solid 2px black;
        border-collapse: collapse;
        border-color: lightgrey;        
        padding: 4px;
      }
      table th{
        color: blue;
        font-size:  20px;
      }
      table td{
        color: green;
        font-size: 25px;
      }
    </style>
  </head>
  <body>                        --> 5
    <div>                       --> 6
      <table align = "center">  --> 7
        <tr>
          <th>Name</th>
          <th>Language</th>
          <th>Platform</th>
        </tr><br>
        <tr>
          <td>Unreal Engine</td>
          <td>C++</td>
          <td>Cross platform</td>
        </tr>
      </table>
    </div>
  </body>
</html>
    

HTML 描述

标签(<tags>)写在菱形括号<>内,可以是成对的(<title>)或不成对的(<br>

  1. <!DOCTYPE html>标签代表 HTML5 语法,它支持一些新标签,例如navheader等。

  2. html标签包含HTML内容,也称为标签。

  3. head包括 CSS 样式代码、JavaScript 代码和元标签。

  4. CSS 用于装饰内容,可以使用样式标签添加。

  5. 所有 HTML 渲染的内容都应放在body标签内。

  6. div作为容器来表示屏幕上的某个区域。

  7. table标签用于以表格形式呈现数据。th表示粗体标题列,td表示列,tr表示行。有两行,称为兄弟行。

可以单独创建 CSS 和 JavaScript 文件,并使用链接脚本标签链接到多个 HTML 页面。

先决条件

Python 拥有丰富的软件包集合,pip工具用于在当前开发环境中管理这些软件包。本指南将使用以下模块:

  • 请求:发出网络请求

  • Beautiful Soup:从 HTML 响应中提取数据

使用以下pip命令安装所需的包:

      pip install beautifulsoup4 requests
    

使用空格在单个安装语句中提及多个模块

数据提取和清理

抓取的第一步是获取数据。因此,为了演示目的,我们将使用游戏引擎列表页面。让我们打开页面并使用检查选项查看结构。

这将打开开发人员工具窗口,其中将显示 HTML 元素结构。有一个idbodyContentdiv,其中包含所有可见的 HTML 元素,如下所示:

  1. 这是包含有关游戏引擎详细信息的表格标签。

  2. 每个tr代表列表中的一个条目并包含列条目。

  3. 这是光标,它将突出显示网页上的相应元素,这里它突出显示第二行的第一列,即“4A 引擎”标题。

  4. 节点提供所选节点的属性,如idstyle等。样式提供有关CSS代码的详细信息,图层提供有关重新绘制内容(如图像等)的详细信息。

  5. 属性部分显示类的名称wikitable sortable jquery-tablesorter,这是为应用于此表的一组 CSS 样式属性赋予的可自定义名称。

抓取脚本

现在我们知道了包含数据的具体 HTML 标签,所以让我们直接开始编写代码。

第一步是导入模块。BeautifulSoup用于抓取数据,Requests用于发出HTTP 请求。

      from bs4 import BeautifulSoup # BeautifulSoup is in bs4 package 
import requests
    

发出 HTTP 请求以通过特定 URL 获取 HTML 内容。

      URL = 'https://en.wikipedia.org/wiki/List_of_game_engines'
content = requests.get(URL)
    

创建一个BeautifulSoup对象并定义解析器

      soup = BeautifulSoup(content.text, 'html.parser')
    

默认解析器是lxml ,与html.parser相比,它更宽松、更快,尽管lxml依赖于平台,而html.parser是 Beautiful Soup 的一部分。

解析器将输入转换为称为标记的单个实体,然后进一步将标记转换为图形或树结构以进行处理。

BeautifulSoup可以提取特定标签的单个或多个出现,也可以接受基于属性的搜索条件,例如:

  1. 查找:此函数将标签名称作为字符串输入,并从网页响应中返回特定标签找到的第一个匹配项:
      row = soup.find('tr') # Extract and return first occurrence of tr
print(row)            # Print row with HTML formatting
print("=========Text Result==========")
print(row.get_text()) # Print row as text
    
  1. Findall:使用find_all从页面响应中提取特定标签的所有出现情况,如下所示:
      rows = soup.find_all('tr')
for row in rows:          # Print all occurrences
    print(row.get_text())
    

find_all返回ResultSet的对象,该对象提供基于索引的访问找到的结果,并且可以使用for<font style="vertical-align: inh

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据