/proxy-pool

proxy-pool:java,基于springboot的爬取代理可用的代理ip,开箱即用。

Primary LanguageJava


PROXY-POOL:基于springboot框架获取代理ip:stars:

                                               _ 
                                              | |
 _ __  _ __ _____  ___   _   _ __   ___   ___ | |
| '_ \| '__/ _ \ \/ / | | | | '_ \ / _ \ / _ \| |
| |_) | | | (_) >  <| |_| | | |_) | (_) | (_) | |
| .__/|_|  \___/_/\_\\__, | | .__/ \___/ \___/|_|
| |                   __/ | | |                  
|_|                  |___/  |_|                  
                                                 

主要功能

​ :tangerine:为定时爬取网上发布的免费代理,采用定时任务的方式,验证爬取的代理,保证代理的可用性,主要提供API使用方式。同时你也可以扩展代理源以增加代理池IP的质量和数量。


如何运行

1.下载代码

git clone git@github.com:1974525360/proxy-pool.git

2.安装依赖

3.配置文件

配置文件 application.yaml 位于项目的主目录resources下:

# redis的配置
spring:
  redis:
    port: 6379
# 服务对外开放的端口
server:
  port: 8093

# 爬取任务和校验ip的配置
job:
  task:
    # redis中有效的ip数量小于指定数量则爬取ip
    count-ip: 20
    # 校验有效的ip 使用爬取的ip通过代理的方式模拟游览器请求发送指定url
    validity:
      http-url: "https://www.baidu.com/"
      https-url: "http://httpbin.org"
      # 代理请求校验失败的次数 超过此次数则加入黑名单
      fail-count: 2

4.启动项目

1️⃣ idea中直接运行

2️⃣ 使用maven 打包成jar,使用以下指令:

java -jar proxy-pool-0.0.1.jar

如何使用

Api

  • 启动web服务后, 默认配置下会开启 http://localhost:8093 的api接口服务:
api method Description params(暂时无可选参数)
🐇/get get 随机获取一个代理参数 可选参数: ?type=https 过滤支持https的代理
🐎/pop get 获取并删除一个代理 可选参数: ?type=https 过滤支持https的代理
🐶 /list get 获取所有代理 可选参数: ?type=https 过滤支持https的代理
🐱/count get 查看代理数量

如何扩展

1.爬取配置

​ 在项目文件中,启用的代理爬取方法名,代理爬取方法位于util/fetcher/WebProxyFetcher.java类中,因为代理源不稳定,时 常改变,所以在代理源失效时,直接把其注释即可,以保证代理源是始终有效的。

  • 扩展代理

    1️⃣ 使用类似的代码,在其中实现自己的爬取逻辑,代码如下:

    @Async
    @ExceptionHandler
    @Retryable(value = Exception.class)
    public void webProxyPool08() throws Exception {
        
    }
  • 定时任务

    2️⃣在util/job/RequestPoolJob.java类中,加入如下代码:

     log.info("开始爬取第八个网址============>>>");
     webProxyFetcher.webProxyPool08();

2.校验配置

​ 在com\zms\proxy\running\RedisQueueDisposableBeanRunning.javal类中,这一部分主要是管理redis的存储的生命周期和启动之后所要执行的校验方法,代码如下:

    @Override
    public void start() {
        log.info("开始前清理redis==============>>");
//        抓取的ip存放位置
        redisBaseService.delete(keyCn);
//        校验有效的ip存放位置
        redisBaseService.delete(effKey);
//        黑名单
        redisBaseService.delete(nullityHttpKey);
        redisBaseService.delete(nullityHttpsKey);
//        国外的ip
        redisBaseService.delete(keyNotCN);
//        有效的ip映射
        redisBaseService.delete(effMapKey);
        log.info("开启redis-ip校验==============>>");
//		  支持的http校验
        proxyIpCheck.checkRedisQueueHttp();
//        暂时不支持https校验
//      proxyIpCheck.checkRedisQueueHttps();
        running = true;
    }

​ :key:在此方法中,主要配置的是下次启动时,对于redis中的存取的ip管理,注释掉黑名单就可以在下次启动时减少校验次数,提高效率。


代理来源

​ 目前实现的采集免费代理网站有(排名不分先后, 下面仅是对其发布的免费代理情况, 付费代理测评可以参考这里 )

代理名称 状态 更新速度 可用率 地址 代码
站大爷 🌟🌟 地址 webProxyPool01()
66代理 🌟🌟 地址 webProxyPool02()
开心代理 🌟🌟 地址 webProxyPool03()
快代理 🌟🌟 地址 webProxyPool04()
proxylist 🌟🌟 地址 webProxyPool05()
云代理 🌟🌟 地址 webProxyPool06()
89代理 🌟🌟 地址 webProxyPool07()

贡献代码

  • 感谢此项目 提供给我开发的思路和免费的代理网址。
  • 本项目依然不够完善,如果发现bug或有新的功能添加,请在Issues提交。