golang-proxy v2.0
Golang-Proxy -- 簡單高效的免費代理抓取工具通過抓取網路上公開的免費代理,來維護一個屬於自己的高匿代理池,用於網路爬蟲、資源下載等用途。
golang-proxy
Version 2.0
- 不再依賴 MySQL 和 NSQ!
- 之前需要分別啟動
publisher
、consumer
和assessor
,現在 只需要啟動主程式 即可!
- 提供了高度靈活的 API 介面,在啟動主程式後,即可通過在瀏覽器訪問
localhost:9999/all
與 localhost:9999/random
直接擷取抓到的代理!甚至可以使用 localhost:9999/sql?query=
來執行 SQL 陳述式來自訂代理篩選規則!
- 提供
Windows
、Linux
、Mac
開箱即用版!
Download Release v2.0
安裝
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 頁面根據系統內容提供了一些壓縮包,將他們解壓後執行即可。
開箱即用版下載地址: Download Release v2.0
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
- 穩定、快速。
抓模數塊,單核並發可以到達 1000 個頁面/秒。
- 高可配置性、高拓展性。
你不需要寫任何代碼,花一兩分鐘填寫一個設定檔就可以添加一個新的網站源。
- 評估功能。
通過 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
- 使用中任何問題提
issues
即可
- 如果發現了新的好用的源,歡迎提交上來分享
- 來都來了點個 Star 再走唄 : )