爬虫代理 IP 池

前言:

平时在做爬虫项目时难免需要使用 IP 池,本文就是为了做爬虫的小伙伴推荐几款 Github 上好用的 IP 代理池项目,有需要的小伙伴可以参考一下!


简介

高可用 IP 代理池,本项目所采集的 IP 资源都来自互联网,愿景是为大型爬虫项目提供一个高可用低延迟的高匿 IP 代理池

项目特点

  • 代理来源丰富
  • 代理抓取提取精准
  • 代理校验严格合理
  • 监控完备,鲁棒性强
  • 架构灵活,便于扩展
  • 各个组件分布式部署

Docker 部署

  • 安装 Docker
  • 安装 docker-compose
    1
    pip install -U docker-compose
  • 修改 settings.py 中的 SPLASH_URLREDIS_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_TASKSPIDER_AJAX_GFW_TASK 的任务 enable 属性设置为 0 或者启动爬虫的时候指定爬虫类型为 commonajax
    1
    python crawler_booter.py --usage crawler common ajax
  • 相同代理 IP,对于不同网站的代理效果可能大不相同。如果通用代理无法满足您的需求,您可以为特定网站编写代理 IP 校验器

proxy_pool(推荐)

简介

ProxyPool 爬虫代理 IP 池,爬虫代理 IP 池项目,主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供 API 和 CLI 两种使用方式。同时你也可以扩展代理源以增加代理池 IP 的质量和数量。

Docker 运行

1
2
3
docker pull jhao104/proxy_pool

docker run --env DB_CONN=redis://:password@ip:port/db -p 5010:5010 jhao104/proxy_pool:latest

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
    2
    cd proxypool
    python3 run.py

安装使用

  • 安装

    1
    2
    cd 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 来源

参考链接

IPProxyPool

简介

很多网站对爬虫都会有 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 持久化
# 目前只支持 redis
# 这里只能修改你的 redis 连接字符串
PERSISTENCE = {
'type': 'redis',
'url': 'redis://127.0.0.1:6379/1'
}

# 协程并发数
# 爬取下来的代理测试可用性时使用,减少网络 io 的等待时间
COROUTINE_NUM = 50

# 保存多少条代理
# 默认200,如果存储了200条代理并不删除代理就不会再爬取新代理
PROXY_STORE_NUM = 300

# 如果保存的代理条数已到阀值,爬取进程睡眠秒数
# 默认60秒,存储满200条后爬虫进程睡眠60秒,醒来后如果还是满额继续睡眠
PROXY_FULL_SLEEP_SEC = 60

# 已保存的代理每隔多少秒检测一遍可用性
PROXY_STORE_CHECK_SEC = 1200

# web api
# 指定接口 IP 和端口
WEB_API_IP = '127.0.0.1'
WEB_API_PORT = '8111'

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 代理。