假设以下情况 - 我有1000个不同的IP地址和50个网址(网页)。我需要在考虑某些限制的情况下抓取这些网页 -
1.1.1.1
不能用于多次点击网址http://example.com
我正在记录Mysql表中的每个抓取条目。因此,如果1.1.1.1
访问了1.1.1.1
和http://example.com
,则表格中会有2个条目
http://test.com
和(1.1.1.1, http://example.com)
我的负载均衡策略是这个 - 在每次抓取之前,找到目前为止抓取次数最少的IP并使用。
然而,我觉得这不是很优化,因为我必须执行分组查询来获取计数然后在我进行爬行之前对它们进行排序。
处理此事的更好方法是什么?
PS :为了加快抓取速度,我也使用了多个线程
答案 0 :(得分:0)
我考虑使用IP地址列表并将其提供给itertools.cycle()。然后,您只需将每个URL分配给您从itertools.cycle()获得的下500个IP地址。
多线程的一种方法是从循环中获取输出并将其从一个线程推送到阻塞队列。然后,您可以拥有其他线程,每个线程都会获取一个URL并分发到您从队列中获得的下500个IP。