在一个完美的世界中,您需要的所有数据都将以开放且文档完善的格式清晰地呈现,您可以轻松下载并用于您需要的任何目的。
在现实世界中,数据是混乱的,很少以您需要的形式打包,并且经常过时。
通常,您需要的信息被困在网站内部。虽然一些网站努力以清晰、结构化的数据格式呈现数据,但许多网站并没有这样做。网络爬取、抓取、处理和清理数据对于从绘制网站结构到收集仅以网络格式存在或可能锁定在专有数据库中的数据等各种活动来说是必要的。
迟早,您会发现需要进行一些爬取和抓取来获取您需要的数据,而且几乎可以肯定的是,您需要进行一些编码才能正确完成。 如何做到这一点取决于您,但我发现 Python 社区为从网站抓取数据提供了出色的工具、框架和文档。
在我们深入探讨之前,请快速请求一下:三思而后行,并且友善。在抓取的上下文中,这可能意味着很多事情。 不要仅仅为了复制网站并将别人的作品作为自己的作品展示(未经许可,当然)而抓取网站。 请注意版权和许可,以及每项版权和许可可能如何应用于您抓取的任何内容。 尊重 robots.txt 文件。 并且不要过于频繁地访问网站,以至于实际的人类访问者难以访问内容。
声明了这一警告之后,这里有一些出色的 Python 工具,用于爬取和抓取网络,并解析出您需要的数据。
Pyspider
让我们从 pyspider 开始,这是一个带有基于 Web 的用户界面的网络爬虫,可以轻松跟踪多个爬取。 这是一个可扩展的选项,支持多个后端数据库和消息队列,并内置了几个方便的功能,从优先级排序到重试失败页面、按年龄爬取页面等等。 Pyspider 同时支持 Python 2 和 3,为了更快的爬取速度,您可以在分布式格式中使用它,让多个爬虫同时运行。
Pyspyder 的基本用法已得到充分 记录,包括示例代码片段,您可以查看 在线演示 以了解用户界面。 pyspyder 在 Apache 2 许可下获得许可,仍在 GitHub 上积极开发。
MechanicalSoup
MechanicalSoup 是一个围绕非常流行且功能极其强大的 HTML 解析库 Beautiful Soup 构建的爬取库。 如果您的爬取需求相当简单,但需要您选中几个复选框或输入一些文本,并且您不想为此任务构建自己的爬虫,那么这是一个值得考虑的好选择。
MechanicalSoup 在 MIT 许可下获得许可。 有关如何使用它的更多信息,请查看项目 GitHub 页面上的示例源文件 example.py。 不幸的是,该项目目前没有完善的文档
Scrapy
Scrapy 是一个由活跃社区支持的抓取框架,您可以使用它构建自己的抓取工具。 除了抓取和解析工具外,它还可以轻松地以多种格式(如 JSON 或 CSV)导出其收集的数据,并将数据存储在您选择的后端。 它还具有许多内置扩展,用于处理 cookie、用户代理欺骗、限制爬取深度等任务,以及一个 API,用于轻松构建您自己的附加组件。
有关 Scrapy 的介绍,请查看 在线文档 或他们的许多 社区 资源,包括 IRC 频道、Subreddit 以及他们在 StackOverflow 标签上的大量关注者。 Scrapy 的代码库可以在 GitHub 上 找到,采用 3 条款 BSD 许可。
如果您不太擅长编码,Portia 提供了一个可视化界面,使操作更加容易。 托管版本可在 scrapinghub.com 上获得。
其他
-
Cola 将自己描述为“高级分布式爬取框架”,如果您正在寻找 Python 2 方法,它可能会满足您的需求,但请注意它已超过两年未更新。
-
Demiurge 同时支持 Python 2 和 Python 3,是另一个值得关注的潜在候选者,尽管该项目的开发也相对平静。
-
Feedparser 如果您尝试解析的数据主要驻留在 RSS 或 Atom 源中,则可能是一个有用的项目。
-
Lassie 可以轻松地从网页检索基本内容,如描述、标题、关键字或图像列表。
-
RoboBrowser 是另一个用于 Python 2 或 3 的简单库,具有基本功能,包括按钮点击和表单填写。 虽然它已经有一段时间没有更新了,但仍然是一个合理的选择。
这远非一份全面的列表,当然,如果您是编码大师,您可以选择采用自己的方法,而不是使用这些框架之一。 或者,也许您已经找到了一个为不同语言构建的优秀替代方案。 例如,Python 编码人员可能会喜欢查看 Selenium 的 Python 绑定,用于在不使用实际 Web 浏览器的情况下更难爬取的网站。 如果您有最喜欢的爬取和抓取工具,请在下面的评论中告诉我们。
4 条评论