使用多台计算机(使用不同的IP)刮取大量页面

时间:2015-10-07 13:05:31

标签: python web-scraping

我必须从几个网页上抓取信息并使用BeautifulSoup +请求+线程。我创建了许多工作程序,每个工作程序从队列中获取URL,下载它,从HTML中擦除数据并将结果放入结果列表。 This是我的代码,我认为将其粘贴到此处的时间太长了。

但是我遇到了以下问题 - 这个网站probalby限制了每分钟一个IP的请求数量,因此抓取的速度并没有那么快。但是有一台服务器有不同的IP,所以我想我可以利用它。

我想为服务器创建一个脚本来监听某个端口(带有套接字)并接受URL,处理它们,然后将结果发送回我的主机。

但我不确定是否没有现成的解决方案,这个问题对我来说似乎很常见。如果有,我应该使用什么?

1 个答案:

答案 0 :(得分:1)

大多数Web服务器都使用rate limiting来节省资源并防止DoS攻击;这是一项共同的安全措施。

现在调查你的问题,这些是你可以做的事情。

  1. 在不同的不同请求之间放一些睡眠(它会 降低每秒的请求数;和服务器可能不会对待 你的代码为机器人)
  2. 如果您在家用计算机上使用互联网连接并且没有使用任何静态IP地址,则每次使用简单的telnet接口拒绝您的请求时,您都可以尝试重新启动路由器。
  3. 如果您使用的是云服务器/ VPS,您可以购买多个IP地址并通过不同的网络接口切换您的请求,它还可以帮助您降低每秒的请求。
  4. 您需要检查服务器中拒绝网页的真正原因;写一个明确的答案是非常笼统的话题;以下是您可以做的某些事情,以找出导致您的请求被拒绝的原因,并选择上述方法之一来解决问题。

    1. 减少每秒请求数,并查看Web服务器的执行情况。
    2. 设置HTTP的请求标头以模拟Web浏览器并查看其是否阻止。
    3. 您的互联网连接带宽/机器的网络连接限制也可能有问题;使用netstat监视请求被阻止之前和之后的活动连接数。