Golang實現的IP代理池

henson發表於2017-05-17

採集免費的代理資源為爬蟲提供有效的代理

專案地址: https://github.com/henson/ProxyPool

1、代理池設計

  代理池由四部分組成:

  • Getter:

  代理獲取介面,目前有9個免費代理源,每呼叫一次就會抓取這些網站最新的100個代理放入Channel,可自行新增額外的代理獲取介面;

  • Channel:

  臨時存放採集來的代理,通過訪問穩定的網站去驗證代理的有效性,有效則存入資料庫;

  • Schedule:

  用定時的計劃任務去檢測資料庫中代理IP的可用性,刪除不可用的代理。同時也會主動通過Getter去獲取最新代理;

  • Api:

  代理池的訪問介面,提供get介面輸出JSON,方便爬蟲直接使用。

2、程式碼實現

  • Api:

  api介面相關程式碼,提供get介面,輸出JSON;

  • Storage:

  資料庫相關程式碼,資料庫採用Mongo;

  • Getter:

  代理獲取介面,目前抓取這九個網站的免費代理,當然也支援自己擴充套件代理介面;

  1. 快代理
  2. 代理66
  3. IP181
  4. 有代理
  5. 西刺代理
  6. guobanjia
  7. 訊代理
  8. 無憂代理
  9. Proxylist+
  • Schedule:

  定時任務,目前在main.go中以輪詢方式實現,後期會改進;

  • Util:

  存放一些公共的模組、方法或函式,包含Config:讀取配置檔案config.json;

  • 其他檔案:

  配置檔案:config.json,資料庫配置和代理獲取介面配置;

{
    "mongo": {
        "addr": "mongodb://127.0.0.1:27017/",
        "db": "temp",
        "table": "pool"
    },
    "host": ":8080"
}

3、安裝及使用

因為有些代理網站使用了加密頁面、混淆程式碼等反爬技術,要正確採集到代理資料得用到 PhantomJS ,必須提前先裝好。

另外,本專案用到的依賴庫有:

gopkg.in/mgo.v2
github.com/PuerkitoBio/goquery
github.com/parnurzeal/gorequest
github.com/nladuo/go-phantomjs-fetcher

下載本專案:

go get -u github.com/henson/ProxyPool

然後配置好相應的config.json並啟動:

go build
./ProxyPool

隨機輸出可用的代理:

GET http://localhost:8080/v1/ip

HTTP

隨機輸出HTTPS代理:

GET http://localhost:8080/v1/https

HTTPS

4、感謝

如果你喜歡本專案,請幫忙點個贊,謝謝!

相關文章