櫃買-券商買賣證券日報表研究
櫃買-券商買賣證券日報表研究
櫃買-券商買賣證券日報表 VS 我不是機器人
- 券商買賣證券日報表查詢系統(一般交易)
此系統可取得最近一日的上櫃買賣日報。但網站加了 google 的 「我不是機器人」驗證,以避免程式抓取。 (reCAPTCHA v2)。 - 網站中有一個隱藏的 textarea
- 可以先行手動修改 html,然後將驗證複製出來。這個驗證可以放在 postdata 中,只要驗證尚未過期,是可以透過程式抓取最終的 csv 檔的。
破解驗證的 api
anti-captcha網站有提供「我不是機器人」的破解服務。以下就實際註冊帳號並實作破解驗證並下載資料。
- 註冊帳號,使用 google 登入即可。
- Accept User Agreement
- 註冊完成後,可以看到帳戶餘額以及金鑰,這個金鑰是在使用 api 時需用到的。同時也可以看到,每使用 1000 次「我不是機器人」的破解服務,費用是 2 美金。
- 在 Finance 選單中,可以使用 Demo Credit 功能,輸入自己的手機後,可以獲得 $0.01 至 $0.1 美金的試用額度。
- 接下來可以看網站中的 api 教學文件
- 其中也有提供 C# 範例程式 (github)
- 將取得的範例程式,改寫如下這裡有兩個變數值需注意。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23private static void ExampleRecaptcha2Proxyless(string url)
{
string result = string.Empty;
DebugHelper.VerboseMode = true;
var api = new RecaptchaV2Proxyless
{
ClientKey = ClientKey,
WebsiteUrl = new Uri(url),
//WebsiteUrl = new Uri("https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw"),
WebsiteKey = "6LcCoP8SAAAAAKzsvbTXymxqNWcC-dAhDYik0V3C"
};
if (!api.CreateTask())
DebugHelper.Out("API v2 send failed. " + api.ErrorMessage, DebugHelper.Type.Error);
else if (!api.WaitForResult())
DebugHelper.Out("Could not solve the captcha.", DebugHelper.Type.Error);
else
{
DebugHelper.Out("Result: " + api.GetTaskSolution().GRecaptchaResponse, DebugHelper.Type.Success);
}
}
首先是 WebsiteUrl 。這邊輸入「券商買賣證券日報表查詢系統(一般交易)」的網址,也就是 https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw
然後是 WebsiteKey 。需要輸入的值是 6LcCoP8SAAAAAKzsvbTXymxqNWcC-dAhDYik0V3C 。可由 chrome F12 得到。 - 實際執行程式,可以看到 api 有確實取得驗證
完整程式
如果需要下載指定清單中的全部股票資料,有下列事項需要特別注意
- 兩檔股票間需要加上間隔,否則 ip 會被 ban。可參考使用 15 秒+一個隨機秒數。
- 透過 api 取得的驗證,有可能在一段時間之後失效。此時需透過 api 重新取得一次驗證。
- 即使重新取得驗證,直接再下載檔案還是有可能會出現錯誤訊息。
- 目前測試結果,是參考手動操作步驟情境,在取得驗證之後先 POST https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/brokerBS.php?l=zh-tw 一次,然後才是 POST https://www.tpex.org.tw/web/stock/aftertrading/broker_trading/download_ALLCSV.php 下載 csv 檔案。
- 實際透過程式批次下載成果 (有在驗證失效後,自動重新驗證並下載的版本)