gpt4 book ai didi

mysql - 如何平衡网页抓取的负载

转载 作者:行者123 更新时间:2023-11-29 17:57:17 25 4
gpt4 key购买 nike

假设以下场景 -我有 1000 个不同的 IP 地址和 50 个 url(网页)。我需要在考虑到某些限制的情况下抓取这些网页 -

  1. 每个 URL 必须被 500 个不同的 IP 地址访问。 (即每个网址 500 次访问)
  2. 一个 IP 地址只能访问一个 URL 一次。例如: 1.1.1.1 不能用于多次点击 url http://example.com
  3. 在整个抓取过程中,ip 之间的负载应尽可能平衡。 1.1.1.1 不应该抓取 100 次,而其他 ip 只抓取 4-5 次,因为这不平衡

我目前正在记录 Mysql 表中的每个爬行条目。因此,如果 1.1.1.1 访问了 http://example.comhttp://test.com,则会有 2 个条目表格

(1.1.1.1, http://example.com)(1.1.1.1, http://test.com)

我的负载平衡策略是这样的 -在每次抓取之前,找到迄今为止抓取次数最少的 IP 并使用它

但是,我觉得这不是很优化,因为每次在进行爬网之前,我都必须执行分组查询来获取计数,然后对它们进行排序。

有什么更好的方法来处理这个问题?

PS:为了加快抓取速度,我也使用了多线程

最佳答案

我会考虑使用 IP 地址列表并将其提供给 itertools.cycle() 。然后,您只需将每个 URL 指定给从 itertools.cycle() 获得的接下来 500 个 IP 地址即可。 .

多线程的一种方法是从循环中获取输出并将其从一个线程推送到阻塞队列。然后,您可以拥有其他线程,每个线程获取一个 URL 并分发到您从队列中获得的下一个 500 个 IP。

关于mysql - 如何平衡网页抓取的负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48689057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com