通过基本的 Python 工具获得爬取完整 HTML 网站的实践经验。
(本文字数:11235,阅读时长大约:14 分钟)
有很多很棒的书可以帮助你学习 Python ,但是谁真正读了这那些大部头呢?(剧透:反正不是我)。
许多人觉得教学书籍很有用,但我通常不会从头到尾地阅读一本书来学习。我是通过做一个项目,努力的弄清楚一些内容,然后再读另一本书来学习。因此,暂时丢掉书,让我们一起学习 Python。
接下来是我的第一个 Python 爬取项目的指南。它对 Python 和 HTML 的假定知识要求很低。这篇文章旨在说明如何使用 Python 的 requests 库访问网页内容,并使用 BeatifulSoup4 库以及 JSON 和 pandas 库解析网页内容。我将简要介绍 Selenium 库,但我不会深入研究如何使用该库——这个主题值得有自己的教程。最终,我希望向你展示一些技巧和小窍门,以减少网页爬取过程中遇到的问题。
安装依赖
我的 GitHub 存储库 中提供了本指南的所有资源。如果需要安装 Python3 的帮助,请查看 Linux 、 Windows 和 Mac 的教程。
$ python3 -m venv
$ source venv/bin/activate
$ pip install requests bs4 pandas
如果你喜欢使用 JupyterLab ,则可以使用 notebook 运行所有代码。 安装 JupyterLab 有很多方法,这是其中一种:
# from the same virtual environment as above, run:
$ pip install jupyterlab
为网站抓取项目设定目标
现在我们已经安装了依赖项,但是爬取网页需要做什么?
让我们退一步,确保使目标清晰。下面是成功完成网页爬取项目需求列表:
- 我们收集的信息,是值得我们花大力气去建立一个有效的网页爬取器的。
- 我们所下载的信息是可以通过网页爬取器合法和道德地收集的。
- 对如何在 HTML 代码中找到目标信息有一定的了解。
- 利用恰当的工具:在此情况下,需要使用 BeautifulSoup 库和 requests 库。
- 知道(或愿意去学习)如何解析 JSON 对象。
- 有足够的 pandas 数据处理技能。
关于 HTML 的备注:HTML 是运行在互联网上的“猛兽”,但我们最需要了解的是标签的工作方式。标签是一对由尖括号包围关键词(一般成对出现,其内容在两个标签中间)。比如,这是一个假装的标签,称为 pro-tip:
<pro-tip> All you need to know about html is how tags work </pro-tip>
我们可以通过调用标签 pro-tip 来访问其中的信息(All you need to know…)。本教程将进一步介绍如何查找和访问标签。要进一步了解 HTML 基础知识,请查看 本文 。
网站爬取项目中要找的是什么
有些数据利用网站爬取采集比利用其他方法更合适。以下是我认为合适项目的准则:
没有可用于数据(处理)的公共 API。通过 API 抓取结构化数据会容易得多,(所以没有 API )有助于澄清收集数据的合法性和道德性。而有相当数量的结构化数据,并有规律的、可重复的格式,才能证明这种努力的合理性。网页爬取可能会很痛苦。BeautifulSoup(bs4)使操作更容易,但无法避免网站的个别特殊性,需要进行定制。数据的相同格式化不是必须的,但这确实使事情变得更容易。存在的 “边际案例”(偏离规范)越多,爬取就越复杂。
免责声明:我没有参加过法律培训;以下内容无意作为正式的法律建议。
关于合法性,访问大量有价值信息可能令人兴奋,但仅仅因为它是可能的,并不意味着应该这样做。
值得庆幸的是,有一些公共信息可以指导我们的道德规范和网页爬取工具。大多数网站都有与该网站关联的 robots.txt 文件,指出允许哪些爬取活动,哪些不被允许。它主要用于与搜索引擎(网页抓取工具的终极形态)进行交互。然而,网站上的许多信息都被视为公共信息。因此,有人将 robots.txt 文件视为一组建议,而不是具有法律约束力的文档。 robots.txt 文件并不涉及数据的道德收集和使