爬虫代理IP池
前言:
平时在做爬虫项目时难免需要使用IP池,本文就是为了做爬虫的小伙伴推荐几款Github上好用的IP代理池项目,有需要的小伙伴可以参考一下!
简介
高可用IP代理池,本项目所采集的IP资源都来自互联网,愿景是为大型爬虫项目提供一个高可用低延迟的高匿IP代理池。
项目特点
- 代理来源丰富
- 代理抓取提取精准
- 代理校验严格合理
- 监控完备,鲁棒性强
- 架构灵活,便于扩展
- 各个组件分布式部署
Docker部署
- 安装Docker
- 安装docker-compose
1
pip install -U docker-compose
- 修改settings.py中的
SPLASH_URL
和REDIS_HOST
参数1
2
3# 注意,如果您使用master分支下的代码,这步可被省略
SPLASH_URL = 'http://splash:8050'
REDIS_HOST = 'redis' - 使用docker-compose启动各个应用组件
1
docker-compose up
- 这种方式会一同部署
squid
,您可以通过squid
调用代理IP池,也可以使用客户端调用,和单机部署调用方式一样
注意事项
- 本项目高度依赖Redis,除了消息通信和数据存储之外,IP校验和任务定时工具也使用了Redis中的多种数据结构。 如果需要替换Redis,请自行度量
- 由于GFW的原因,某些网站需要通过科学上网才能进行访问和采集,如果用户无法访问墙外的网站,请将rules.py
task_queue
为SPIDER_GFW_TASK
和SPIDER_AJAX_GFW_TASK
的任务enable
属性设置为0或者启动爬虫的时候指定爬虫类型为common
和ajax
1
python crawler_booter.py --usage crawler common ajax
- 相同代理IP,对于不同网站的代理效果可能大不相同。如果通用代理无法满足您的需求,您可以为特定网站编写代理IP校验器
proxy_pool(推荐)
简介
ProxyPool 爬虫代理IP池,爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供API和CLI两种使用方式。同时你也可以扩展代理源以增加代理池IP的质量和数量。
Docker运行
1 | docker pull jhao104/proxy_pool |
API使用
启动Web服务后,默认配置下会开启 http://127.0.0.1:5010 的api接口服务
api | method | Description | params |
---|---|---|---|
/ | GET | api介绍 | None |
/get | GET | 随机获取一个代理 | 可选参数: ?type=https 过滤支持https的代理 |
/pop | GET | 获取并删除一个代理 | 可选参数: ?type=https 过滤支持https的代理 |
/all | GET | 获取所有代理 | 可选参数: ?type=https 过滤支持https的代理 |
/count | GET | 查看代理数量 | None |
/delete | GET | 删除代理 | ?proxy=host:ip |
ProxyPool - Python
简介
跨语言高性能IP代理池,Python实现。注意:请运行程序前先更新一下抓取代理的爬虫。
运行环境
- Python 3.6
请务必保证Python的版本在3.6以上,否则异步检验无法使用。 - Redis
Redis官网并没有提供Windows的安装版,Windows用户可以点击此处下载一个我自己编译的二进制版本(3.2版本2.7MB,VS 2015编译)。
安装
直接使用
-
安装依赖
1
pip install -r requirements.txt
Windows用户如果无法安装lxml库请点击这里。
-
打开代理池和API
1
2cd proxypool
python3 run.py
安装使用
-
安装
1
2cd proxypool
python setup.py install -
打开代理池和API
1
proxypool_run
使用API获取代理
访问http://127.0.0.1:5000/
进入主页,如果显示Welcome
,证明成功启动。
api | method | Description | params |
---|---|---|---|
/ | GET | 测试是否部署成功 | None |
/get | GET | 可以获取一个可用代理 | None |
/count | GET | 可以获取代理池中可用代理的数量 | None |
简介
使用 scrapy 爬虫抓取代理网站,获取大量的免费代理 ip。过滤出所有可用的 ip,存入数据库以备使用。
运行环境
安装 python3 和 mysql 数据库,cryptography模块安装环境:
1 | sudo yum install gcc libffi-devel python-devel openssl-devel |
1 | pip install -r requirements.txt |
下载使用
-
将项目克隆到本地
1
git clone https://github.com/awolfly9/IPProxyTool.git
-
进入工程目录
1
cd IPProxyTool
-
修改 MySQL数据库配置 config.py 中 database_config 的用户名和密码为数据库的用户名和密码
1
$ vim config.py---------------database_config = { 'host': 'localhost', 'port': 3306, 'user': 'root', 'password': '123456', 'charset': 'utf8',}
-
MySQL: 导入数据表结构
1
$ mysql> create database ipproxy;Query OK, 1 row affected (0.00 sec)$ mysql> use ipproxy;Database changed$ mysql> source '/你的项目目录/db.sql'
-
运行启动脚本 ipproxytool.py 也可以分别运行抓取,验证,服务器接口脚本,运行方法参考项目说明
1
python ipproxytool.py
-
新增异步验证方式,运行方法如下
1
python ipproxytool.py async
使用API获取代理 ip
在 config.py 中修改启动服务器端口配置 data_port,默认为 8000 启动服务器
1 | python run_server.py |
获取
-
链接
1
http://127.0.0.1:8000/select?name=httpbin&anonymity=1&https=yes&order=id&sort=desc&count=100
-
参数
Name Type Description must name str 数据库名称 是 anonymity int 1:高匿 2:匿名 3:透明 否 https str https:yes http:no 否 order str table 字段 否 sort str asc 升序,desc 降序 否 count int 获取代理数量,默认 100 否
删除
-
链接
1
http://127.0.0.1:8000/delete?name=httpbin&ip=27.197.144.181
-
参数
Name Type Description 是否必须 name str 数据库名称 是 ip str 需要删除的 ip 是
插入
-
链接
1
http://127.0.0.1:8000/insert?name=httpbin&ip=555.22.22.55&port=335&country=%E4%B8%AD%E5%9B%BD&anonymity=1&https=yes&speed=5&source=100
-
参数
Name Type Description 是否必须 name str 数据库名称 是 ip str ip 地址 是 port str 端口 是 country str 国家 否 anonymity int 1:高匿,2:匿名,3:透明 否 https str yes:https,no:http 否 speed float 访问速度 否 source str ip 来源 否
参考链接
简介
很多网站对爬虫都会有 IP 访问频率的限制。如果你的爬虫只用一个 IP 来爬取,那就只能设置爬取间隔,来避免被网站屏蔽。但是这样爬虫的效率会大大下降,这个时候就需要使用代理 IP 来爬取数据。一个 IP 被屏蔽了,换一个 IP 继续爬取。此项目就是提供给你免费代理的。
特性
- 爬取、验证、存储、Web API 多进程分工合作。
- 验证代理有效性时使用协程来减少网络 IO 的等待时间。
- 按照代理连接速度排序并持久化(目前使用 Redis)爬取下来的代理。
- 提供 Web API,随时提取与删除代理。
安装使用
使用 Python3.6 开发的项目,没有对其他版本 Python 测试,代理的存储使用 Redis,所以你必须确保本机已安装它。
-
克隆源码
1
git clone git@github.com:gavin66/proxy_list.git
-
安装依赖
推荐使用 virtualenv 来构建环境,防止冲突
1
pip install -r requirements.txt
-
运行脚本
1
python run.py
配置
配置项都在 config
配置文件中,以下项可按你的需求修改
1 | # 持久化 |
Web API
简介
文智能代理池,仅支持Python 3.8+。主要特征:
- 自动代理ip爬取和验证
- 易于使用的 JSON API
- 简单但漂亮的基于 Web 的用户界面(例如代理的地理分布)
- 最少只使用1 个命令开始
- 简单的 HTTP 转发代理服务器
- Scrapy并请求最少只用 1 行代码集成
- 无头浏览器抓取
安装
使用 Docker 安装(强烈推荐)
1 | docker run -d -p 8899:8899 -p 8081:8081 -v /var/www/scylla:/var/www/scylla --name scylla wildcat/scylla:latest |
JSON API
-
代理IP列表
1
http://localhost:8899/api/v1/proxies
-
可选的 URL 参数
参数 默认值 描述 page
1
页码 limit
20
每页显示的代理数量 anonymous
any
是否显示匿名代理。可能的值: true
, 仅匿名代理;false
, 仅透明代理https
any
是否显示 HTTPS 代理。可能的值: true
,仅HTTPS代理;false
, 仅 HTTP 代理countries
没有任何 过滤特定国家/地区的代理。格式示例: US
,或多国:US,GB
-
系统统计
1
http://localhost:8899/api/v1/stats
网页界面
-
在浏览器中打开以查看此项目的 Web UI
1
http://localhost:8899
-
代理IP列表
1
http://localhost:8899/
-
全球地理分布图
1
http://localhost:8899/#/geo
ProxyPool - Java
- ProxyPool的作用:从网络上获取免费可用的IP代理数据。先用爬虫程序抓取代理数据,再检查代理是否可用,可用的话就存放到数据库中。每隔一段时间重复执行这个过程
- ProxyPool的技术:Spring Boot+RxJava2.x+MongoDB等,前端:layUI+jquery 等
- ProxyPool的概述:该项目有两个模块proxypool和proxypool-web,从网络上抓取数据的核心工作由proxypool模块完成,可以在site这个package下新增针对不同网页的解析类。proxypool-web模块是依赖proxypool模块实现的sample模块
Golang实现的IP代理池,采集免费的代理资源为爬虫提供有效的IP代理。