代理IP或者分布式爬虫:
如果对页的爬虫的效率有要求,那就不能通过设定访问时间间隔的方法来绕过频率检查了。
代理IP访问可以解决这个问题。如果用100个代理IP访问100个页面,可以给网站造成一种有100个人,每个人访问了1页的错觉。这样自然而然就不会限制你的访问了。
代理IP经常会出现不稳定的情况。你随便搜一个“免费代理”,会出现很多网站,每个网站也会给你很多的代理IP,但实际上,真正可用的代理IP并不多。你需要维护一个可用的代理IP池,但是一个免费的代理IP,也许在你测试的时候是可以使用的,但是几分钟以后就失效了。使用免费代理IP是已经费时费力,而且很考验你运气的事情。
大家可以使用http://icanhazip.com/这个网站来检测你的代理IP是否设定成功。当你直接使用浏览器访问这个网站的时候,它会返回你的IP地址。如下图所示:
通过requests,我们可以设置代理访问网站,在requests的get方法中,有一个proxies参数,它接收的数据是一个字典,在这个字典中我们可以设置代理。
importrequestsproxies = {"http":"http://10.10.1.10:3128",#HTTP类型的代理"https":"http://10.10.1.10:1080"}#HTTPS类型的代理requests.get("http://example.org", proxies=proxies)
大家可以在requests的官方中文文档中看到关于设置代理的更多信息:http://docs.python-requests.org/zh_CN/latest/user/advanced.html#proxies
我在网上找了一些代理IP,如下图所示:
以上代理在我写这篇文档的时候经过测试是可以使用的,但是各位同学在看这篇文档的时候,他们可能已经失效了。
我选择第一个HTTP类型的代理来给大家做测试,运行效果如下图所示:
从上图可以看出,我们成功通过了代理IP来访问网站。
我们还可以使用分布式爬虫。分布式爬虫会部署在多台服务器上,每个服务器上的爬虫统一从一个地方拿网址。这样平均下来每个服务器访问网站的频率也就降低了。由于服务器是掌握在我们手上的,因此实现的爬虫会更加的稳定和高效。这也是我们这个课程最后要实现的目标。