在 Python 中分发网络爬虫

Distributing a web crawler in Python

我是一名 Python 学习者,我真的很喜欢这篇文章:

"A Web Crawler With asyncio Coroutines" by A. Jesse Jiryu Davis and Guido van Rossum

我不明白的一件事是我如何在多台计算机的集群上扩展这个程序。那是 asyncio 库的一部分,还是你是分布式部分的 "on your own"?

一种可能是使用外部任务队列。有很多可供选择,Celery是一个受欢迎的。基本思想是将作业推送到队列中,任意数量的工作进程都可以使用它们。对于网络爬虫来说,抓取一份工作可能就像 URL 一样简单。工作人员将从队列中抓取一个 URL,检索它,解析它,并将任何新的 URL 作为新作业添加到队列中。

这个系统的优点是 worker 只是进程,可以通过网络与队列通信,所以你可以在任意多台机器上拥有任意数量的 worker。