我在JSOUP
中使用Java
lib编写了一个数据抓取软件。我发布了一些数据on this page,我从提交的页面获得了结果。一切都很完美,但他们最近更新了网站,现在在300-500结果后,这个页面不适合我,它在接下来的几个小时内被打破。当我手动更改代理时:
System.setProperty("http.proxyHost", proxy);
System.setProperty("http.proxyPort", proxyPort);
然后我的应用程序继续,一切正常。问题是因为当我收到Read time
异常时,我必须每次都手动更新代理。
还有其他方法可以在500多个结果之后绕过这个阻止IP过滤器,或者每当我的IP被阻止时我必须自己输入代理?
答案 0 :(得分:1)
我认为真正的问题不在于如何切换代理,而是在目标机器上达到某些限制。请记住,有些服务器负载很重,或者需要向其他用户提供内容。因此,他们建立了一些爬行配额或其他DoS限制,因此一个人进行密集爬行会更难耗尽本地资源。它因网站而异,但您需要通过实验来检查。如果你的服务器给你2-3页/秒,那就不错了。检查Heritrix爬虫的实例。默认情况下,它实现"Responsible Crawling"的规则,这意味着爬网程序尝试与远程服务器保持礼貌。例如:默认情况下,它会在向同一服务器发出另一个请求之前等待5秒。还有一个延迟因子(默认值为5),如果服务器需要1秒钟才能回复,那么我们可能不会在5秒内发出超过1个请求。
回到问题:您需要检查的是:
在任何情况下,请记住,某些服务器的爬网可能非常繁重,并且仍需要一些资源来为其他访问者提供服务。我知道这不是原始问题的答案,但我认为这是解决问题的另一种方法:)
答案 1 :(得分:0)
如果您不介意使用外部API,可以尝试使用我的https://gimmeproxy.com。它不断检查代理,并为每个请求提供随机工作。