爬虫有时会遇到被禁ip的情况,此时你可以找到代理网站,抓取ip,进行动态轮询,除了scrapy可以使用之外,一般的java,php,python等都可以通过curl进行调用,具体怎样设置才能查看?
如果不使用第三方的平台做代理ip,我们就必须得手动抓取ip了,可以google搜索代理ip,可以找到一大堆网站,找几个稳定的代理网站,可以写一个爬虫脚本持续抓取,如果使用量不大的话,也可以手动粘贴抓取,如果预算高一点,就买一点其实也可以。
此时,如果您使用python,您需要自己维护ip池,控制每个ip的访问次数,随机更换ip等。然而,如果您想服务,您可以使用Squid绑定多个ip地址并进行正向代理。Squid是Linux系统下使用的优秀代理服务器软件,并根据squid的cache_peer机制按照一定格式写在文件中。
这个就相当于将管理和调度的问题全交给了squid来做,你只需要使用爬虫访问squid的服务端口就可以了。
现在可以将所有步骤归纳总结一下:
1.使用爬虫脚本每天定期抓取代理网站上的免费ip,或者购买一定数量的ip,并将其写入mongodb或其他数据库中,以此表为原始表格。
2.使用前需要进行一个测试,即测试ip是否有效。方法是使用curl访问网站查看返回值,并创建新表格。如果原始表格循环读取有效,则插入。确认后,从原始表格中删除。验证时,可以利用响应时间计算ip的质量和最大使用次数。一个算法可以参考一个基于连接代理优化管理的多线程网络爬虫处理方法。
3.将有效的ip写入squid的配置文件,重新加载配置文件。
4.让爬虫程序去指定的squid的服务ip和端口,进行抓取。
如果需要详细了解ip代理,如果需要高效果,可以选择自己购买拨号服务器,搭建代理IP池,用过一段时间后,需要花费大量的时间去维护,所以,自己搭建代理IP池是有一定的难度,还需要更多的维护成本。使用IP代理效果明显好了太多,相对成本也低些,比如使用IPIDEA。
如果是想用于项目,不实际,拨号服务器与代理IP的方式搭建,效果是差不多,效果好。在成本上来说,还是代理IP更合适一些。