小编给大家分享一下爬虫爬取过程中代理IP会遇到什么问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
学爬虫数据,必然是爬虫和反爬虫的对抗。
用代理ip做反爬虫还是比较有效的。
在做抓取代理ip项目之前,还搜索了一些相关项目。qiye的项目还不错,但是用起来也有问题。比如偶尔会被个别代理网站关闭ip(某段时间重启太多程序)。
当scrapy使用qiye项目时,经常会出现10060和10061的错误,以及超时等错误,从而导致代理ip在代理池中不断地刷。为了解决这个问题,我们考虑了两种方法:
1.更改scrapy代码
当使用代理时,request没有成功重启。切记,scrapy不会重新启动request。
2.确保代理ip的有效性
方法2更合适,scrapy应该专注于抓取网站。方法2也保证了代理ip的有效性。
这意味着你重写了一个爬行代理ip项目。
工程设计与实现。
最初的想法比较简单,直接实现了代理ip的捕捉、验证、存储和获取功能。类似于qiye项目。在代理网站上获取代理ip,验证url后存储sqlite,然后要求webapi返回代理ip。
问题来了:
1、目标网站是douban[虽然豆瓣上有api,但是api不能满足我的需求,只能自己爬豆瓣],相当于测试代理ip欺骗豆瓣的反爬虫设置。豆瓣反爬虫最重要的是访问cookie。这个cookie也可以随机模仿。
2、sqlite本身就是一个轻量级数据库。单个过程/线程访问没有问题。并行访问时,需要建立自己的锁保护。我觉得用sqlite比较低,不需要用mysql。qiye项目使用sqlalchemy支持各种数据库。我觉得没必要,因为作为辅助项目,定位小,重量轻。可以快速返回用户代理ip。
3、在测试豆瓣和豆瓣api时遇到的坑,就是豆瓣api使用代理ip基本无效.代理ip爬豆瓣还不错,但通过代理ip突破了豆瓣api分钟的限制,代理ip全部失败,很少成功.估计豆瓣api对反爬的设置要严格些,使用高匿的代理ip就可以了.但实际上高匿的ip很少,代理网站说是高匿的,不一定是高匿的。
就豆瓣而言,cookie需要设置两个项目,否则很容易被ban使用。并非ip问题。事实上,这也说明了一个问题,需要了解一些抓取网站的机制,多尝试。
4、数据库中存储的数据越多,一个过程处理不完就会被淹没。
5、各种细节。
设计/实现。
1) 使用bloomfilter判重.所获代理ip可以在判重复之前判重,通过检查判重,减少资源消耗.bf每隔一段时间就会被清空。
python本身就有bf,当时好像遇到了什么问题,实际使用和需求有点不一致,具体记不清了,最后抛弃了bf,使用了别人的bfonredis项目.paramiao/pydrbloomfilter。
其实我只是想用bf。做轮子需要时间,暂时不做。
2) 目标站点检测中使用的反爬虫方法:
代理人ip[废话,测试]随机agent带cookie访问。
3) 多个过程进行ip判断.防止过多的过程一直运行.当前判断过程的数量是直接配置在配置文件中,以后要做到自适应。
4) 代理ip以轮询方式提供。接着更新算法,根据时间和数量进行选择。
5) web缓存,选择一定数量的ip,每2-3分钟测试一次。这个测试不需要爬网站的网站,因为测试后可以连接代理访问,比如baidu。
6) 数据库使用redis.redis作为两点,一是数据存储,二是web缓存。redis本身不大。适合这里。此外,bf-redis项目也使用redis。
7) 为多个目标网站提供不同的代理和缓存。
以上是“爬虫爬取过程中代理IP会遇到什么问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。