本项目所采集的IP资源都来自互联网,愿景是为大型爬虫项目提供一个高可用低延迟的高匿IP代理池。
注意,代码请在release列表中下载,master分支的代码不保证能稳定运行
REDIS_HOST
、REDIS_PASSWORD
等参数。SPLASH_URL
pip install -r requirements.txt
启动scrapy worker,包括代理IP采集器和校验器
python crawler_booter.py --usage crawler
python crawler_booter.py --usage validator
启动调度器,包括代理IP定时调度和校验
python scheduler_booter.py --usage crawler
python scheduler_booter.py --usage validator
近日不断有同学问,如何获取该项目中可用的代理IP列表。haipproxy
提供代理的方式并不是通过api api
来提供,而是通过具体的客户端来提供。
目前支持的是Python客户端和语言无关的squid二级代理
from client.py_cli import ProxyFetcher
args = 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/zhihu
安装squid,备份squid的配置文件并且启动squid,以ubuntu为例
sudo apt-get install squid
sudo sed -i 's/http_access deny all/http_access allow all/g' /etc/squid/squid.conf
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backup
sudo service squid start
SQUID_BIN_PATH
、SQUID_CONF_PATH
、SQUID_TEMPLATE_PATH
等参数squid conf
的定时更新程序
sudo python squid_update.py
import requests
proxies = {'https': 'http://127.0.0.1:3128'}
resp = requests.get('https://httpbin.org/ip', proxies=proxies)
print(resp.text)
安装Docker
安装docker-compose
pip install -U docker-compose
修改settings.py中的SPLASH_URL
和REDIS_HOST
参数
# 注意,如果您使用master分支下的代码,这步可被省略
SPLASH_URL = 'http://splash:8050'
REDIS_HOST = 'redis'
使用docker-compose启动各个应用组件
docker-compose up
这种方式会一同部署squid
,您可以通过squid
调用代理IP池,也可以使用客户端调用,和单机部署调用方式一样
task_queue
为SPIDER_GFW_TASK
和SPIDER_AJAX_GFW_TASK
的任务enable
属性设置为0或者启动爬虫的时候指定爬虫类型为common
和
ajax
python crawler_booter.py --usage crawler common ajax
以单机模式部署haipproxy
和测试代码,以知乎为目标请求站点,实测抓取效果如下
测试代码见examples/zhihu
项目监控主要通过sentry和prometheus,通过在关键地方 进行业务埋点对项目各个维度进行监测,以提高项目的鲁棒性
项目使用Sentry作Bug Trace
工具,通过Sentry可以很容易跟踪项目健康情况
使用Prometheus+Grafana做业务监控,了解项目当前状态
开源不易,如果本项目对您有用,不妨进行小额捐赠,以支持项目的持续维护
本项目参考了Github上开源的各个爬虫代理的实现,感谢他们的付出,下面是笔者参考的所有项目,排名不分先后。