https://github.com/phpgao/proxy_pool.git

Jimmy c0fb2d0229 Merge branch 'release/v0.6.3' 7 months ago
cache d3df31a27d add log 8 months ago
db 7bb04f70ed update 8 months ago
ipdb 619ebc8bf4 add gin and middleware 8 months ago
job 2fa21af78a add need retry 8 months ago
model 0a61a4a13d optimize 8 months ago
queue 0a6ce8f6a0 refactor config 8 months ago
schedule 619ebc8bf4 add gin and middleware 8 months ago
server 4623bf0df5 add random_text 7 months ago
ulimit 59b2266009 add features 8 months ago
util ddc0f3f06f add limit 8 months ago
validator a0b93e284f add chromedp 8 months ago
.gitignore 475e7446b7 add make file 8 months ago
Dockerfile 73b34bfb14 rm config 8 months ago
LICENSE e6b1772ba1 Initial commit 8 months ago
Makefile 8e3259cae8 rename 8 months ago
README.md a4ed527f0b add pip 8 months ago
config_example.json 6424d1152f fix bugs 8 months ago
docker-compose.yml 2c1c420d4a bump version 7 months ago
go.mod a0b93e284f add chromedp 8 months ago
go.sum a0b93e284f add chromedp 8 months ago
main.go 619ebc8bf4 add gin and middleware 8 months ago

README.md

proxy_pool

一个简单的代理池工具

A simple proxy pool written in go

功能

  • 定时抓取互联网公开免费的代理
  • 定时验证可用代理
  • 支持动态代理(https仅支持connect)
  • 使用采集到的代理访问代理网站
  • 使用命令行环境变量进行配置
  • 当没有IP可用时使用本地转发

依赖

  • redis

使用说明

编译

go build

下载

# 版本 v0.3.3
wget https://github.com/phpgao/proxy_pool/releases/download/v0.3.3/proxy_pool_linux_amd64
chmod a+x proxy_pool_linux_amd64

使用

cp config_example.json config.json
# 修改redis和端口配置

# 感谢ipip.net提供精准的IP数据(已内置)
./proxy_pool

# 打印可设定参数
./proxy_pool_linux_amd64 --help

# 命令行指定配置
./proxy_pool_linux_amd64 -host 8.8.8.8 -port 6379 -auth laogao

# 后台运行
nohup ./proxy_pool_linux_amd64 > /dev/null 2>&1 &

api

# 统计
curl 127.0.0.1:8088
# 随机
curl 127.0.0.1:8088/random
# 获取列表
curl 127.0.0.1:8088/get

动态代理

# http
curl http://cip.cc -x 127.0.0.1:8089
# https
curl https://cip.cc -x 127.0.0.1:8089

一些细节

流程图

                                                                 +-------------------------+
                                                                 |                         |
                                                                 |                         |
+-------------+      +------------+         +-------------+      |                         |
|             |      |            |         |             |      |                         |
|   source    +------> new proxy  +--------->  validator  +------>                         |
|             +------>            +--------->             +------>                         |
|             |      |            |         |             |      |         The Pool        |
+-------------+      +------------+         +-------------+      |                         |
                                                                 |                         |
                             +----------------------------------->                         |
                             |           +/- score               |                         |
                             |                                   |                         |
                             |                                   |                         |
                             |                                   +-------------+-----------+
                             |                                                 |
                     +-------+------+        +--------------+                  |
                     |              |        |              |                  |
                     |              <--------+              |      cron        |
                     |  old proxy   <--------+  validator   +<-----------------+
                     |              |        |              |
                     |              |        |              |
                     +--------------+        +--------------+

关于验证逻辑

  1. 代理检测采用打分机制,新代理默认60分,满分100,检测每失败一次扣30分,成功一次加10分,当分数小于等于0时,对应的代理地址将会被删除
  2. 新的代理入库前有三道检测(tcp,http,https),只要通过了http测试,就会被添加到数据库中
  3. 定时检测只会测试tcp和https的connect方法,同时会把之前判定为http的代理修正为https,但是如果一个https被检测到错误,会扣20分
  4. 目前规则还不算很完善,欢迎大家一起讨论,提高代理的稳定性

关于添加采集源

  1. demo见源码source文件夹下
  2. 爬虫分为html、json、re还有text型
  3. 爬虫复用了Spider结构体,新爬虫必须实现的方法如下

    • Cron --> 定义了启动间隔
    • Name --> 定义了爬虫名
    • Run --> 通用方法,用来执行下载和解析,照抄即可
    • StartUrl --> 返回目标网站的入口页面
    • Parse --> 接收最终的html代理,返回[]model.HttpProxy实例的指针

关于动态代理

  1. 核心代码取自HTTP(S) Proxy in Golang in less than 100 lines of code,做了一些针对性的优化
  2. 如果当前没有代理可用,软件会把自身作为透明代理

关于传统API代理

  1. 接口分为统计和获取
  2. 查询支持schema=http(s),source=spider.name,score=100,country=cn

todo

  • tcp池
  • go test
  • 更精细的超时控制
  • 主从模式
  • 代理认证

反馈

期待大家的测试和反馈!

更多

如果你在使用scrapy,为什么不试试scrapy-random-useragent-pro呢?

感谢