1. 程式人生 > >go proxy 快捷的高匿代理抓取工具

go proxy 快捷的高匿代理抓取工具

golang-proxy v2.0

Golang-Proxy – 簡單高效的免費代理抓取工具通過抓取網路上公開的免費代理,來維護一個屬於自己的高匿代理池,用於網路爬蟲、資源下載等用途。
golang-proxy

Version 2.0

  1. 不再依賴 MySQL 和 NSQ
  2. 之前需要分別啟動publisherconsumerassessor,現在 只需要啟動主程式 即可!
  3. 提供了高度靈活的 API 介面,在啟動主程式後,即可通過在瀏覽器訪問localhost:9999/alllocalhost:9999/random 直接獲取抓到的代理!甚至可以使用 localhost:9999/sql?query=來執行 SQL 語句來自定義代理篩選規則!

安裝

1. 通過編譯原始碼

go get github.com/storyicon/golang-proxy

進入到 golang-proxy 目錄,執行 go build main.go,執行生成的二進位制的執行程式即可。

注意:
go build 的過程中可能出現cannot find package "github.com/gocolly/col1ly" in any of 等找不到包的情況,根據提示的地址 go get 即可

# 比如如果在 go build main.go 的時候提示
business\publisher.go:8:2: cannot find package "github.com/gocolly/col1ly" in any of:
        F:\Go
\src\github.com\gocolly\col1ly (from $GOROOT) D:\golang\src\github.com\gocolly\col1ly (from $GOPATH) C:\Users\Administrator\go\src\github.com\gocolly\col1ly D:\ivank\src\github.com\gocolly\col1ly 執行 go get github.com/gocolly/col1ly 即可

如果覺得麻煩,可以使用 /bin 目錄中提供的 開箱即用 版本。

2. 開箱即用版本

Release 頁面根據系統環境提供了一些壓縮包,將他們解壓後執行即可。

3. Tips

專案根目錄下的 ./source 是專案執行必須的資料夾,裡面儲存了各類網站源,其他的資料夾儲存的均為專案原始碼。所以在編譯後得到二進位制程式 main 檔案後,即可將 main 檔案和 source 資料夾一同移動到任意地方,main 檔案可以任意命名。
如果提示找不到 source資料夾, 你可以在執行程式時加上-source=引數來指定source資料夾路徑,例如:

# xxx填source資料夾的相對或者絕對路徑
main -source=xxx

API 介面

在程式執行後,可以通過在瀏覽器訪問以下介面獲取資料庫中抓取到的代理。

1. 隨機獲取一條代理

地址: http://localhost:9999/random
返回示例:
{
    //狀態碼0表示成功,1表示錯誤
    "code": 0,
    "message": [{
        "id": 124,
        "content": "http://190.2.144.133:1080",
        //評估次數,次數越多,代表代理存活時間越長
        "assess_times": 13,
        //評估成功次數,success_times/assess_times可以得到評估成功率
        "success_times": 11,
        //平均響應時間,單位為秒
        "avg_response_time": 2.0831538461538464,
        //連續評估失敗次數,是分數計算的重要指標
        "continuous_failed_times": 0,
        //分數,分數越高,代理質量越高
        "score": 3.2747991296955083,
        //插入時間戳(秒)
        "insert_time": 1532324791,
        //更新時間戳(秒)
        "update_time": 1532414960
    }]
}

2. 獲取所有可用代理

地址: http://localhost:9999/all

3. 執行 SQL

地址: http://localhost:9999/sql/query=xxxx
將xxxx替換為要執行的sql語句即可,程式配置了兩張表:
valid_proxy 存放高可用代理
crawl_proxy 抓取到的代理的快取表(代理質量不能保證)

例如: http://localhost:9999/sql/query=SELECT * FROM VALID_PROXY WHERE 1 ORDER BY SCORE DESC
將會將所有的可用代理按照分數倒序並返回。

為什麼要用 Golang-Proxy

  1. 穩定、快速。
    抓取模組,單核併發可以到達 1000 個頁面/秒
  2. 高可配置性、高拓展性。
    你不需要寫任何程式碼,花一兩分鐘填寫一個配置檔案就可以新增一個新的網站源。
  3. 評估功能。
    通過 Assessor 評估模組,週期性測試代理質量,根據代理的測試成功率、高匿性、測試次數、突變性、響應速度等獨立影響因子進行綜合評分,演算法具有高度可配置性,可以根據專案的需要可以對因子的權重進行獨立調整。

如何配置一個新的源

./source/下的所有 yml 格式的檔案都是,你可以增加源,也可以通過在檔名前加上一個 . 來使程式忽略這個源,當然你也可以直接刪除,來讓一個源永遠的消失,下面進行 Source 引數介紹:

#Page配置項
page:
    entry: "https://xxx/1.html"
    template: "https://xxx/{page}.html"
    from: 2
    to: 10
#publisher將會首先抓取entry,即 https://xxx/1.html
#然後根據 template、from 和 to 依次抓取
#  https://xxx/2.html
#  https://xxx/3.html
#  https://xxx/4.html
#  ...
#  https://xxx/10.html
#Selector配置項
selector:
    iterator: ".table tbody tr"
    ip: "td:nth-child(1)"
    port: "td:nth-child(2)"
    scheme: "td:nth-child(3)"
    filter: ""
# 以上配置用於抓取下面這種 HTML 結構
# <table class="table">
#     <tbody>
#         <tr>
#             <td>187.3.0.1</td>
#             <td>8080</td>
#             <td>HTTP</td>
#         <tr>
#         <tr>
#             <td>164.23.1.2</td>
#             <td>80</td>
#             <td>HTTPS</td>
#         <tr>
#         <tr>
#             <td>131.9.2.3</td>
#             <td>8080</td>
#             <td>HTTP</td>
#         <tr>
#     <tbody>
# <table>
# 選擇器為通用的JQuery選擇器,iterator為迴圈物件,比如表格裡的行,每行一條代理,那這個行的選擇器就是iterator,而ip、port、protocal則是在iterator選擇器的基礎上進行子元素的查詢。
# protocal為空,或protocal對應的元素無法找到,則預設是HTTP型別
category:
    # 並行數
    parallelnumber: 1
    # 對於這個源,每抓取一個頁面
    # 將會隨機等待5~20s再抓下一個頁面
    delayRange: [5, 20]
    # 間隔多長時間啟用一次這個源
    # @every 10s , @every 10h...
    interval: "@every 10m"
debug: true

Request For Comments

  1. 使用中任何問題提 issues 即可
  2. 如果發現了新的好用的源,歡迎提交上來分享
  3. 來都來了點個 Star 再走唄 : )