【发布时间】:2016-11-30 17:23:23
【问题描述】:
我已经用 Python 制作了简单的网络爬虫。到目前为止,它所做的一切都创建了一组应该访问的 url,一组已经访问过的 url。在解析页面时,它将该页面上的所有链接添加到应该访问的集合和页面 url 到已经访问的集合,依此类推,而 should_be_visited 的长度> 0。到目前为止,它在一个线程中完成所有操作。
现在我想为这个应用程序添加并行性,所以我需要有一组相同类型的链接和少量线程/进程,每个线程/进程都会从 should_be_visited 中弹出一个 url 并更新 already_visited。我真的迷失在线程和多处理方面,我应该使用它们,我需要一些池、队列吗?
【问题讨论】:
-
对于这组要访问的URL,是很多都是同一个服务器,还是都来自不同的服务器?
-
同一个
-
好的,在这种情况下,您可能根本不应该并行化,除非服务器在您的控制之下并且您的服务器/网络能够处理负载。而不是加快您的请求,这在远程管理员看来是一种拒绝服务攻击,您应该在每个请求之间设置一个小的延迟,也许是一两秒。抓取的广泛规则是应该慢慢完成,而不是快速完成,如果不遵守这一点,可能会将您的服务器置于 IP 阻止列表中。
标签: python multithreading web-crawler python-multithreading