一、背景
前段時間,寫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列表頁面。
- 提供代理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 歡迎下載。。。