Package: haipproxy
HAipproxyREADME｜中文文档本项目所采集的IP资源都来自互联网，愿景是为大型爬虫项目提供一个高可用低延迟的高匿IP代理池。Features快速抓取代理IPIP抓取和提取精准IP来源丰富优良的IP校验器，并且容易根据自身需要扩展支持分布式部署架构设计灵活MIT授权协议Quick start注意，代码请在release列表中下载，master分支的代码不保证能稳定运行单机部署服务端安装Python3和Redis。有问题可以阅读这篇文章的相关部分。根据Redis的实际配置修改项目配置文件config/settings.py中的REDIS_HOST、REDIS_PASSWORD等参数。安装scrapy-splash，并修改配置文件config/settings.py中的SPLASH_URL安装项目相关依赖pip install -r requirements.txt启动scrapy worker，包括代理IP采集器和校验器python crawler_booter.py --usage crawlerpython crawler_booter.py --usage validator启动调度器，包括代理IP定时调度和校验python scheduler_booter.py --usage crawlerpython scheduler_booter.py --usage validator客户端近日不断有同学问，如何获取该项目中可用的代理IP列表。haipproxy提供代理的方式并不是通过api api来提供，而是通过具体的客户端来提供。
目前支持的是Python客户端和语言无关的squid二级代理python客户端调用示例fromclient.py_cliimportProxyFetcherargs=dict(host='127.0.0.1',port=6379,password='123456',db=0)＃这里`zhihu`的意思是，去和`zhihu`相关的代理ip校验队列中获取ip＃这么做的原因是同一个代理IP对不同网站代理效果不同fetcher=ProxyFetcher('zhihu',strategy='greedy',redis_args=args)# 获取一个可用代理print(fetcher.get_proxy())# 获取可用代理列表print(fetcher.get_proxies())# or print(fetcher.pool)更具体的示例见examples/zhihusquid作为二级代理安装squid，备份squid的配置文件并且启动squid，以ubuntu为例sudo apt-get install squidsudo sed -i 's/http_access deny all/http_access allow all/g' /etc/squid/squid.confsudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backupsudo service squid start根据操作系统修改项目配置文件config/settings.py中的SQUID_BIN_PATH、SQUID_CONF_PATH、SQUID_TEMPLATE_PATH等参数启动squid conf的定时更新程序sudo python squid_update.py使用squid作为代理中间层请求目标网站,默认代理URL为'http://squid_host:3128',用Python请求示例如下importrequestsproxies={'https':'http://127.0.0.1:3128'}resp=requests.get('https://httpbin.org/ip',proxies=proxies)print(resp.text)Docker部署安装Docker安装docker-composepip install -U docker-compose修改settings.py中的SPLASH_URL和REDIS_HOST参数SPLASH_URL='http://splash:8050'REDIS_HOST='redis'使用docker-compose启动各个应用组件docker-compose up这种方式会一同部署squid，您可以通过squid调用代理IP池，也可以使用客户端调用，和单机部署调用方式一样注意事项本项目高度依赖Redis，除了消息通信和数据存储之外，IP校验和任务定时工具也使用了Redis中的多种数据结构。
如果需要替换Redis，请自行度量由于GFW的原因，某些网站需要通过科学上网才能进行访问和采集，如果用户无法访问墙外的网站，请将rules.pytask_queue为SPIDER_GFW_TASK和SPIDER_AJAX_GFW_TASK的任务enable属性设置为0或者启动爬虫的时候指定爬虫类型为common和ajaxpython crawler_booter.py --usage crawler common ajax相同代理IP，对于不同网站的代理效果可能大不相同。如果通用代理无法满足您的需求，您可以为特定网站编写代理IP校验器工作流程开发者文档为了方便用户针对自身需求进行定制化，haipproxy提供了丰富的文档支持。所有文档详见项目wiki效果测试以单机模式部署haipproxy和测试代码，以知乎为目标请求站点，
每一万条成功请求为统计结果，实测抓取效果如下请求量时间耗时IP负载策略客户端02018/03/03 22:030greedypy_cli100002018/03/03 11:031 hourgreedypy_cli200002018/03/04 00:082 hoursgreedypy_cli300002018/03/04 01:023 hoursgreedypy_cli400002018/03/04 02:154 hoursgreedypy_cli500002018/03/04 03:035 hoursgreedypy_cli600002018/03/04 05:187 hoursgreedypy_cli700002018/03/04 07:119 hoursgreedypy_cli800002018/03/04 08:4311 hoursgreedypy_cli可见haipporxy的代理效果还算不错，在开始的时候可以达到1w/hour的请求量，几个小时候请求量请求量
降为了5k/hour。降低的结果可能有三个: (1)随着数据量的增大,Redis的性能受到了一定的影响(2)知乎校验
器在把Init Queue中的代理消费完之后，由于是定时任务，所以导致某段时间内新鲜的IP空缺。而免费IP大多
数都是短效的，所以这段时间出现了IP的空缺;(3)由于我们采用的是greedy模式调用IP，它的调用策略是: 高
质量代理IP会一直被调用直至该代理IP不能用或者被封，而低应速度IP会轮询调用。这也可能导致高质量IP的空缺。由此可见IP校验和调用策略还有很大的优化空间。希望能有志同道合的朋友加入进来一起优化。测试代码见examples/zhihu如何贡献欢迎给项目提新feature如果发现项目某些环节有问题，欢迎提issue或者PR代理IP校验和筛选的策略仍有优化的空间，欢迎大家交流探讨如果你发现了比较好的代理网站，欢迎分享同类项目参考本项目参考了Github上开源的各个爬虫代理的实现，感谢他们的付出，下面是笔者参考的所有项目，排名不分先后。dungproxyproxyspiderProxyPoolproxy_poolProxyPoolIPProxyToolIPProxyPoolproxy_listproxy_pool