繼上篇 實踐排程公開資訊觀測站爬蟲API並寫信通知(1)Python爬蟲
後來才發現開發不符業務部門所需
真正查詢需求在”公告查詢/取得或處分資產公告“中
公告種類可以直接指定 排序 市場別等等也相同
觀察Request情形 發現SDATE, EDATE, YEAR1…都是關於時間參數的設定
透過Postman測試 POST方式放這些參數進去 確定沒問題
比較麻煩的是時間部分 我們的需求是:過去一週、過去半年
所以必須拼出今日到七天前日期,半年也同理
因此這邊透過python中的datetime去取得查詢當日日期做處理
處理完request的這些data後 做出request POST
因為有時候Server會TimeOut 所以做了簡單十次重試動作
如十次跑完還是TimeOut則回傳408
接著開始處理得到的資訊:
這request得到的response中 的確找到了期間內的資料 但是是全部資料
我們需要的只有含有關鍵字“不動產”或是“土地”的公告主旨(解除契約等等關鍵字出現也要濾掉)
所以中間有做簡單文字處理 如果出現則過濾掉
這邊在特別提到
因為需要抓取該項目之詳細資料 一般是點擊Button彈跳出詳情視窗
但該視窗預設無url(about:blank) 也不能用前面DevTools Network的方式側錄
因此直接從html觀察如何開啟此視窗
可以看到onclick event觸發了
onclick="document.fm_t67sb07.step.value="2";document.fm_t67sb07.co_id.value="2056";document.fm_t67sb07.DATE1.value="20210326";document.fm_t67sb07.SKEY.value="1";action="/mops/web/ajax_t67sb02";openWindow(this.form ,"");"
設定了step, co_id, DATE1, SKEY 四個value
並且對/mops/web/ajax_t67sb02發起action
以這樣的理論 把這些參數放做POST 可以得到結果
也不一定要用POST帶參數的方式做 也可以拼出網址
把相關的參數拼接在後面
e.g. [https://mops.twse.com.tw/mops/web/t146sb10/mops](原網址)
[/web/ajax_t67sb02] (action目的地)
?step=2&co_id=2225&DATE1=20210326&SKEY=1&TYPEK=pub&firstin=1(加入參數)
(完整:https://mops.twse.com.tw/mops/web/t146sb10/mops/web/ajax_t67sb02?step=2&co_id=2225&DATE1=20210326&SKEY=1&TYPEK=pub&firstin=1)
即可拼出詳細資訊之網址
而這些參數都在各個td的詳細資料input中
透過整理可以整理出這些
最後將[‘公司代號’, ‘公司簡稱’, ‘公告日期’, ‘主 旨’,’詳細資料URL’]存成一個JSON回傳