springboot實現java代理IP池 Proxy Pool,提供可用率達到95%以上的代理IP
前段時間,寫java爬蟲來爬網易雲音樂的評論。不料,爬了一段時間後ip被封禁了。由此,想到了使用ip代理,但是找了很多的ip代理網站,很少有可以用的代理ip。於是,抱著邊學習的心態,自己開發了一個代理ip池。
二、相關技術及環境
技術: SpringBoot,SpringMVC, Hibernate, SQL/">MySQL, Redis , Maven, Lombok, BootStrap-table,多執行緒併發
環境: JDK1.8 , IDEA
三、實現功能
通過ip代理池,提供高可用的代理ip,可用率達到95%以上。
- 通過介面獲取代理ip 通過訪問介面,如: ofollow,noindex" target="_blank">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列表頁面。
- 提供代理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 架構圖
五、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甚至更多,可用率會變低(因為開啟的校驗執行緒數不夠多)
有什麼使用的問題歡迎回復。。。
本文程式碼已經提交github: https://github.com/chenerzhu/proxy-pool 歡迎下載。。。