go proxy 快捷的高匿代理抓取工具
阿新 • • 發佈:2019-02-08
golang-proxy v2.0
Golang-Proxy – 簡單高效的免費代理抓取工具通過抓取網路上公開的免費代理,來維護一個屬於自己的高匿代理池,用於網路爬蟲、資源下載等用途。
Version 2.0
- 不再依賴 MySQL 和 NSQ!
- 之前需要分別啟動
publisher
、consumer
和assessor
,現在 只需要啟動主程式 即可! - 提供了高度靈活的 API 介面,在啟動主程式後,即可通過在瀏覽器訪問
localhost:9999/all
與localhost: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
- 穩定、快速。
抓取模組,單核併發可以到達 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 再走唄 : )