为网络爬虫存储URL边界和分发工作?

Storing URL frontier and distributing work for web crawler?

我想制作一个具有成本效益的分布式爬虫(即我可以向其添加额外的服务器以更快地处理 URLs),它专注于将整个单个站点作为服务进行爬网。它会抓取目标站点的每个 URL 并下载例如本网站在其他网站上直接引用的任何图像或文件(但不抓取除此之外的其他网站)。由于目标站点所有者会授予爬取其站点的权限,因此爬虫可能不太礼貌,例如每秒下载 20 页。

这个架构听起来合理吗?

我读过几篇关于您不应该(并且应该!)将 PostgreSQL 用作队列的文章...我在这里使用数据库作为队列的想法是它更具成本效益(AWS SQS听起来很昂贵,每百万个请求 0.50 美元),工作人员无论如何都需要将页面元数据写入数据库,因此它需要能够应对已经存在的吞吐量,并且(也许 MQ 系统可以做到这一点)它让我可以编写复杂的排队逻辑.

以上听起来行得通吗?我读过一些关于爬虫的文章,但大多数都没有明确说明工作人员如何沟通以及 URL 边界的存储位置,以便它对故障具有弹性。

关于你的边界我觉得你应该看看frontera or distributed-frontera from scrapinghub

Frontera 预先为您提供了很多功能,例如前沿链接的存储和评分。此外,它是用 Python 编写的,这使得以后的推理和编辑变得容易。

最后一点 -- 文档非常棒,让我在推理网络爬虫如何扩展方面抢先一步。

将 frontera 与 scrapyd 和自定义仪表板一起使用真是一种享受。目前部署在 Digital Ocean 上,但我们可以使用 frontera-distributed 和 EMR (HBASE) 轻松部署到 EC2 和 AWS。

你的建议应该可行。