asyncio+aiohttp异步免费代理池(已失效)
asyncio+aiohttp异步代理池代理池github地址经历了好几天时间,终于将asyncio初步了解,不过使用起来还是只能照搬硬套。不去亲自尝试做一些事,就不知道自己有多少不懂的知识,更不知道原来自己也能独立完成一些事。相对于上一个版本,有以下改进:所有网站只用正则表达式提取代理对于编写规范的问题做了改进爬取免费代理网站和测试代理时使用的是asyncio和aiohttp,增...
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的网站差不多都能使用。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)