Coursera 笔记

Module 01 · Crowdsourcing Short squeeze Dashboard

Webscraping网络抓取

Coursera ↗

在本视频中,我们将深入探讨网页爬虫技术。观看结束后,你将能够:定义网页爬虫、理解 BeautifulSoup 对象的作用、应用 find_all 方法,并能实际动手爬取一个网站。


什么是网页爬虫?

如果你需要分析成百上千个数据点(例如寻找体育队伍中的最佳球员),你会选择手动将信息从不同网站复制粘贴到表格中吗?这种繁琐的任务往往会消耗数小时,甚至让人因压力过大而放弃。

网页爬虫 (Webscraping) 是一种可以从网站上自动提取信息的过程。通过它,原本需要数小时的工作可以在几分钟内轻松完成。

准备工具

要开始爬虫,我们只需要少量的 Python 代码以及两个核心模块:

  1. Requests:用于下载网页内容。
  2. Beautiful Soup:用于解析网页数据。

BeautifulSoup 对象详解

假设你需要从一个网页中提取国家篮球联盟 (NBL) 球员的姓名和薪资:

1. 初始化对象

首先导入 BeautifulSoup。我们可以将网页的 HTML 以字符串形式存储在变量 HTML 中。

  • 解析文档:将 HTML 传递给 BeautifulSoup 构造函数。
  • 生成对象:你将得到一个名为 soup 的 Beautiful Soup 对象。它将文档表示为一种嵌套的数据结构。

2. 标签对象 (Tag Object)

BeautifulSoup 将 HTML 表示为一组类似树状 (Tree-like) 的对象。

  • 对应关系:tag 对象对应于原始文档中的 HTML 标签(例如 <title> 或 <h3>)。
  • 选择规则:如果文档中存在多个同名标签,程序会默认选择第一个出现的元素。
  • 示例:在处理球员 Lebron James 的数据时,如果姓名包含在加粗属性 <b> 中,我们可以利用树状结构进行提取。

树状结构的导航 (Navigation)

利用 BeautifulSoup,你可以像在树枝间移动一样遍历 HTML:

  • 向下导航:访问标签的 子节点 (Child)。
  • 向上导航:使用 .parent 属性访问其 父节点。
  • 水平导航:使用 .next_sibling 属性查找标签的 兄弟节点 (Sibling)。
  • 提取属性:标签的属性名和属性值可以像 Python 字典一样通过键值对访问。
  • 提取内容:可以将标签内的内容返回为 NavigableString(一种支持 BeautifulSoup 功能的增强型 Python 字符串)。

强大的find_all方法

find_all() 是一个高效的过滤器。你可以根据标签名、属性、文本内容或这些条件的组合进行筛选。

实例:提取披萨店列表表格

  1. 创建一个 BeautifulSoup 对象,命名为 table。
  2. 应用过滤:调用 find_all(name="tr")。该方法会搜索标签的所有后代,并检索出所有匹配过滤条件的项。
  3. 结果处理:返回结果是一个像列表一样的 Python 可迭代对象。每个元素都是一个代表行(包括表头)的 <tr> 标签对象。

单元格迭代逻辑:

步骤 操作说明
第一步 通过变量 row 遍历 table_rows 列表。
第二步 在每一行内部,再次应用 find_all 查找所有单元格 <td>。
第三步 遍历变量 cells,依次提取该行中每个单元格的数据。

实战:爬取一个真实网页

要爬取实际的网页,我们需要结合 Requests 库,步骤如下:

  1. 导入模块:导入 requests 和 BeautifulSoup。
  2. 下载网页:使用 requests.get(URL) 方法。
  3. 获取文本:使用 .text 属性获取网页源码,并赋值给变量 page。
  4. 解析网页:基于 page 变量创建 soup 对象。
  5. 提取数据:现在你可以开始解析并抓取你需要的信息了。

想要了解更多实践操作?请查看相关的实验练习 (Labs)。