springboot實現java代理IP池 Proxy Pool,供可用率達到95%代理IP

一、背景

前段時間,寫java爬蟲來爬網易雲音樂的評論。不料,爬了一段時間後ip被封禁了。由此,想到了使用ip代理,但是找了很多的ip代理網站,很少有可以用的代理ip。於是,抱著邊學習的心態,自己開發了一個代理ip池。

二、相關技術及環境

技術: SpringBoot,SpringMVC, Hibernate, MySQL, Redis , Maven, Lombok, BootStrap-table,多線程併發

環境: JDK1.8 , IDEA

三、實現功能

通過ip代理池,提供高可用的代理ip,可用率達到95%以上。

  • 通過接口獲取代理ip 通過訪問接口,如:http://127.0.0.1:8080/proxyIp 返回代理ip的json格式


{

"code":200,

"data":[

{

"available":true,

"ip":"1.10.186.214",

"lastValidateTime":"2018-09-25 20:31:52",

"location":"THThailand",

"port":57677,

"requestTime":0,

"responseTime":0,

"type":"https",

"useTime":3671

}

],

"message":"success"

}

  • 通過頁面獲取代理ip 通過訪問url,如:http://127.0.0.1:8080 返回代理ip列表頁面。
springboot實現java代理IP池 Proxy Pool,供可用率達到95%代理IP

  • 提供代理ip測試接口及頁面 通過訪問url, 如:http://127.0.0.1:8080/test (get)測試代理ip的可用性;通過接口 http://127.0.0.1:8080/test ](post data: {"ip": "127.0.0.1","port":8080} ) 測試代理ip的可用性。

四、設計思路

4.1 模塊劃分

  • 爬蟲模塊:爬取代理ip網站的代理IP信息,先通過隊列再保存進數據庫。
  • 數據庫同步模塊:設置一定時間間隔同步數據庫IP到redis緩存中。
  • 緩存redis同步模塊:設置一定時間間隔同步redis緩存到另一塊redis緩存中。
  • 緩存redis代理ip校驗模塊:設置一定時間間隔redis緩存代理ip池校驗。
  • 前端顯示及接口控制模塊:顯示可用ip頁面,及提供ip獲取api接口。

4.2 架構圖

springboot實現java代理IP池 Proxy Pool,供可用率達到95%代理IP

五、IP來源

代理ip均來自爬蟲爬取,有些國內爬取的ip大多都不能用,代理池的ip可用ip大多是國外的ip。爬取的網站有:http://www.xicidaili.com/nn ,http://www.data5u.com/free/index.shtml ,https://free-proxy-list.net ,https://www.my-proxy.com/free-proxy-list.html ,http://spys.one/en/free-proxy-list/ , https://www.proxynova.com/proxy-server-list/ ,https://www.proxy4free.com/list/webproxy1.html ,http://www.gatherproxy.com/ 。

六、如何使用

前提: 已經安裝JDK1.8環境,MySQL數據庫,Redis。

先使用maven編譯成jar,proxy-pool-1.0.jar。

使用SpringBoot啟動方式,啟動即可。

java -jar proxy-pool-1.0.jar

實際使用當ip代理池中可用ip低於3000個,可用率在95%以上;當代理池中ip數量增加到5000甚至更多,可用率會變低(因為開啟的校驗線程數不夠多)


分享到:


相關文章: