asyncio+aiohttp异步代理池

程序已失效,因为免费代理可用率实在太低,就不维护了。

异步代理池 github地址
初级版本代理池 博客地址
经历了好几天时间,终于将asyncio初步了解,不过使用起来还是只能照搬硬套。

相对于上一个版本,有以下改进:

  • 所有网站只用一个正则表达式提取代理
  • 对于编写规范的问题做了改进
  • 爬取免费代理网站和测试代理时使用的是asyncio和aiohttp,增快了运行效率
  • 本地HTTP服务端使用的是aiohttp.web

因为aioredis只支持Linux,就没有折腾了。所以在运行时间上还是比较长的,大概爬取所有网站(总共六七十个网页)需要十几秒,测试所有代理需要几秒,可能每个人都要些许差异。然后在设计上,程序是每5分钟验证一次数据库中代理是否有效。

爬下来的总代理数为一千三百多,筛选之后会有五六百的代理能用,但通过requests测试发现还是有大概5%的代理失效,这失效速度有点快。

当代理池IP不够,可以重新打开程序获取,因为免费代理网站更新速度一般很快。

更新:
今天抓取知乎用代理池的时候出现问题,就改进了一下。
2018-11-9 :
1.解决运行第二次出现too many file descriptors in select(),因为数据库第一次抓取的代理没有删除,造成asyncio的协程太多,因为asyncio 是基于select的,最大同时支持1024个,就算加了asyncio.Semaphore(500),在任务太多的情况也是报错的。
2.不需要手动重新获取,加入当代理池代理少于200时,重新去网站抓取代理。
3.修复一些细节问题

2018-11-12:
1.过滤掉透明代理

亲测稳定运行,如遇到不能正常运行(报错),可以留言。经过两次修改,每次抓取能使用的代理已经只有大概200个了,不过用于学习和一些简单抓取已经足够了。

不知道为什么,代理访问https只有极少部分能用,而http的网站差不多都能使用。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐