爬虫之代理池维护

前言

做过爬虫的应该都知道,在爬取反爬比较强的网站如果同一时间获取的数据量过大就会导致封IP,例如豆瓣,搜狗之类的。那么我们我们的策略就是搭建自己的代理池,Cookie池,使得爬虫更像是普通用户在操作一样以此来解决目标网站封IP的问题。在网上有大量公开的免费代理,如果经济基础可以的话,我们也可以购买付费的代理IP,用过的人也应该知道,无论是免费的还是付费的,其实都不能保证是可用的,因为可能此IP也会被其他人用来爬取同样的目标站点而封禁,或者代理服务器突然发生故障或网络繁忙。一旦我们选用了一个不可用的代理,这势必会影响爬虫的工作效率。所以我们需要提前做筛选,将不可用的代理剔除掉,从而保留可用的代理。小编今天就给大家带来如何搭建一个高效易用的代理池。

准备工作

首先需要成功安装Redis数据库并启动服务,另外还需要安装aiohttp、request、redis-py、pyquery、Flask库,Redis安装可以参见百度。

代理池的目标

我们需要做到下面的几个目标,来实现易用高效的代理池

基本模块分为4块:存储模块,获取模块,检测模块,接口模块。

存储模块:负责存储抓取下来的代理。首先要保证代理不重复,要标识代理的可用情况,还有动态实时处理每个代理,所以一种比较高效和方便的存储方式就是使用Redis的Sorted

Set,即有序集合。,存储模块同时也是4个模块中的中心模块和基础模块,将其他模块串联起来。

获取模块:需要定时在各大代理网站抓取代理。代理可以是免费公开代理也可以是付费代理,代理的形式都是IP加端口,此模块尽量从不同来源获取,尽量抓取高匿代理,抓取成功之后将可用代理保存到数据库中。

检测模块:需要定时检测数据库中的代理。这里需要设置一个检测链接,最好是爬取那个网站就检测那个网站,这样更加有针对性,如果要做一个通用型的代理,那可以设置百度等链接来检测。另外,我们需要标识每一个代理的状态,如设置分数标识,10分表示可用,分数越少代表越不可用。检测一次,如果代理可用,我们可以将分数标识立即设置为满分10分,或者在原来的基础上加1分;如果代理不可用,可以将分数标识减1分,当分数减到一定阀值后,代理就直接从数据库移除,通过这样的标识分数,我们就可以辨别代理的可用情况,选用的时候会更有针对性。

接口模块:需要用API来提供对外服务的接口。其实我们可以直接连接数据库来取对应的数据,但是这样就需要知道数据库的连接信息,并且要配置连接,而比较安全和方便的方式就是提供一个Web API接口,我们通过访问接口即可拿到可用代理。另外,由于可用代理可能有多个,那么我们可以设置一个随机返回某个可用代理的接口,这样就能保证每个可用代理都可以取到,实现负载均衡。

设计思路已经很明确了,现在我们就用代码来实现代理池。

首先是存储模块,我们需要定义一个类来操作数据库的有序集合,定义一些方法来实现分数的设置、代理的获取等。核心代码如下:

其次是获取模块,获取模块的逻辑相对简单,只需要写一个爬虫来从各大网站抓取代理就可以了。核心代码如下:

方便起见,我们将获取代理的每个方法统一定义为crawl开头,这样扩展的时候只需要添加crawl开头的方法即可。这里实现了几个示例,爬取的大都是网上的免费网站,还有小白购买的付费代理(现在已经不能用了),如果你有自己的付费代理,也只需要添加到里面即可。每个代理方法都定义成了生成器,通过yeild返回一个个代理。程序首先获取网页,然后用解析库进行解析,解析出IP加端口的形式然后返回。

然后定义了一个get_proxies()方法,将所有的以crawl开头的方法调用一遍,获取每个方法返回的代理并组合成列表形式返回。这里我们用元类来实现这个方法。代码如下:

最后定义了一个Getter类,用来动态的调用所有以crawl开头的方法,然后获取抓到的代理,将其加入到数据库存储起来:

我们已经成功的将各个网站的代理获取下来了,现在就需要检测模块来对所有代理进行多轮检测。代理检测可用,分数就设置为10,不可用就丢弃或者减1,这样就可以实时改变每个代理的可用情况。如要获取有效代理只需要获取分数高的代理即可。由于代理的数量非常多。为了提高检测效率,我们在这里使用了异步请求库aiohttp来进行检测。

为了方便的获取代理和使代理池可以作为一个独立服务运行,我们增加了一个接口模块,并以Web API的形式暴露可用代理。

最后通过调度模块调用调用以上模块以多线程方式运行起来。

最后我们运行一下

再打开浏览器配置的API接口 http://127.0.0.1:5555,即可看到其首页。

再访问http://127.0.0.1:5555/random,即可获取随机可用代理。

到此我们的代理池就已经搭建成功了。有了代理池,爬虫就会方便许多。另外小编建议如果搭建自己的代理池,最好是选择付费代理。毕竟稳定性高一些。网上的免费代理在爬取某些网站还是比较吃力。

读者如果有需要ADSL代理池搭建的思路,可以在公众号后台留言。后续会给出Cookie池搭建的方案。

完整代码地址获取可在公众号后台回复【代理池】获得

对爬虫,数据分析,算法感兴趣的朋友们,可以加微信公众号 TWcoding,我们一起玩转Python。

If it works for you.Please,star.

自助者,天助之

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,070评论 25 707
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,928评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 昨天在网易上看到一个熟悉却不了解的名字--陈丹青,点开看了他的发布会演讲:文学与读书!就陈先生而言,他不是读书人,...
    Milly116阅读 370评论 1 1
  • 锣很脆的响了一下,全场嘈杂的唠嗑声渐渐没了,手机屏幕也一个个熄下去。 川剧,变脸,开始! 先是一个老生,迈着四方步...
    铁马书生阅读 451评论 1 1