Module 01 · Crowdsourcing Short squeeze Dashboard
Webscraping网络抓取
在本视频中,我们将深入探讨网页爬虫技术。观看结束后,你将能够:定义网页爬虫、理解 BeautifulSoup 对象的作用、应用 find_all 方法,并能实际动手爬取一个网站。
什么是网页爬虫?
如果你需要分析成百上千个数据点(例如寻找体育队伍中的最佳球员),你会选择手动将信息从不同网站复制粘贴到表格中吗?这种繁琐的任务往往会消耗数小时,甚至让人因压力过大而放弃。
网页爬虫 (Webscraping) 是一种可以从网站上自动提取信息的过程。通过它,原本需要数小时的工作可以在几分钟内轻松完成。
准备工具
要开始爬虫,我们只需要少量的 Python 代码以及两个核心模块:
- Requests:用于下载网页内容。
- 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() 是一个高效的过滤器。你可以根据标签名、属性、文本内容或这些条件的组合进行筛选。
实例:提取披萨店列表表格
- 创建一个 BeautifulSoup 对象,命名为
table。 - 应用过滤:调用
find_all(name="tr")。该方法会搜索标签的所有后代,并检索出所有匹配过滤条件的项。 - 结果处理:返回结果是一个像列表一样的 Python 可迭代对象。每个元素都是一个代表行(包括表头)的
<tr>标签对象。
单元格迭代逻辑:
| 步骤 | 操作说明 |
|---|---|
| 第一步 | 通过变量 row 遍历 table_rows 列表。 |
| 第二步 | 在每一行内部,再次应用 find_all 查找所有单元格 <td>。 |
| 第三步 | 遍历变量 cells,依次提取该行中每个单元格的数据。 |
实战:爬取一个真实网页
要爬取实际的网页,我们需要结合 Requests 库,步骤如下:
- 导入模块:导入
requests和BeautifulSoup。 - 下载网页:使用
requests.get(URL)方法。 - 获取文本:使用
.text属性获取网页源码,并赋值给变量page。 - 解析网页:基于
page变量创建soup对象。 - 提取数据:现在你可以开始解析并抓取你需要的信息了。
想要了解更多实践操作?请查看相关的实验练习 (Labs)。