【芝麻HTTP】使用代理IP一直是爬虫防BAN最有效的手段,但是网上很多代理IP并不能直接用于爬虫项目,这就需要用户做好选择。
以下是用scrapy+redis实现动态代理池过程的简要记录。
我对“动态代理池”的需求。
我的爬虫项目需要7*24小时监控几个页面。经过考虑,希望代理池能够满足以下要求:
始终保持相对稳定的代理数量。
始终保持池中代理的高可靠率(希望90%的代理可以使用)
最小化对crawler项目代码的更改。
已被引用的项目。
我找了一些现成的轮子,发现或多或少都不符合我的需求。
Kohn/httproxymiddleware.
选择代理人的“被动”方式。在scrapymiddleware中添加大量代码,让爬虫在代理失败后去代理网站寻找代理,会出现以下问题:
在大多数情况下,总是使用代理来访问,这导致流量集中在一个IP上,这可能导致代理IP被禁止。
代理切换过程耗时,导致爬虫性能严重下降。
所有的逻辑都嵌入到爬虫项目中,兼容性和可移植性都有问题(如果有多个爬虫,每个都必须重新更改…)
基于python2,我的项目基于python3…
jhao104/proxy_pool.
这和我想要的差不多,但是因为以下原因没有使用:
基于SSDB,这里没有现成的SSDB,因为Redis已经在使用了,我不想安装。
只是定期收代理,在收过程中做一个验证。但实际上,即使收集到的代理通过验证,也未必能活10分钟。时间长了,代理池中会有很多过期的代理,需要在爬虫代码中处理(爬虫代码调用delete来删除)。
设计思路和代码。
看了这么多方案,我在想:代理池能不能有自检自修复的功能?这样,我们的爬虫只需要随机取一个代理使用。即使碰巧得到一个无效的代理,也只需要重试一次。代理池的修复机制可以确保无效代理已被删除,并且在重试时不会被再次检索。
制定一个简单的计划:
我们需要一个每10秒运行一次的自测程序,以确保代理池中的所有代理至少在10秒内有效。
我们需要一个特工招募计划。当代理池中的代理数量过低(阈值设置为<5)时,请访问免费代理网站以补充新代理。
我们需要一个调度器来监控代理池的数量,并调用上述两个程序来维护代理池的平衡。
作为私有代理池,在redis(SET)中维护,让爬虫直接从redis中获取代理。
相应的代码有三个部分:
一个杂乱的爬虫爬上代理网站,获取免费的代理,验证它并把它放入仓库(proxy_fetch)
一个报废的爬行器会对代理池中的所有代理进行一次验证,如果验证失败,则从代理池中删除它们(proxy_check)
调度程序用于管理上述两个爬虫(start.py)
流程图
HQ-proxy.png.
爬虫部分都是从头开始写的,但不是必须的,用请求就够了…但是我在做的时候刚刚学会了抓痒,所以我顺便练习了一下我的手。…
start.py的调度方式比较粗糙,直接启动两个线程,在线程中用os.system调用scratchcrawler(毕竟是轻量级代理池…嗯,事实上,我很懒于制造方便…)
还有几个调度策略需要讨论:
每次调用proxy_fetch,都会自动设置一个10分钟的“保护时间”。在保护期间,除非代理池中只剩下一个代理,否则不会触发proxy_fetch,以避免频繁调用。
增加了24小时的“刷新时间”,保证每24小时至少执行一次proxy_fetch。
验证程序将超时设置为5秒,如果在5秒内没有访问到测试页,则验证失败。
其他细节可以在源码里找到:arthurmmm/HQ-proxy。
部署和使用。
你需要先修改配置文件HQ-problems.yml,填写Redis的地址和密码,修改后放在/etc/HQ-problems.yml下。
在配置文件中,您还可以调整相应的阈值、自由代理源和测试页面。
测试页面需要经常访问。为了节省流量,我在一个云存储上丢了一篇helloworld的文字作为测试页。云存储中有流量限制。建议你换掉。。验证方法很粗糙,比较网页开头的字符串。。
此外,还编写了一个Dockerfile,可以直接部署到Docker(python3使用Daocloud的映像)。运行容器时,记得将HQ-proxy.yml映射到容器/etc/HQ-proxy.yml。
运行pipiinstall-requirements.txt进行手动部署以安装依赖包。
scratch中使用的代理池只需要添加一个中间件,爬行时从redisSET中随机获取一个代理,带有srandmember。代理失败与一般请求超时相同,代理池的自检功能确保重试时再次获得失败代理的概率很低。中间件代码示例:
和其他爬虫框架类似。
芝麻HTTP为您提供了安全、稳定、高效、便捷的爬虫代理IP服务。在提供高级代理IP资源的同时,还可以设置不同类型的HTTP代理,并设置重复数据删除等标准。简单来说,芝麻HTTP就像一个中间桥梁,可以根据用户需求设置HTTP代理类型,从而帮助你不断获取行业数据。芝麻可以为您考虑资源质量问题,帮助您轻松进入“互联网大数据”时代。官网可以免费领取。更多问题,请点击官网信息客服。——芝麻HTTP运营管理团队。
文章部分内容源于网络,联系侵删*
文章参考源于http://h.zhimaruanjian.com/news/2681.html