實踐排程公開資訊觀測站爬蟲API並寫信通知(2)Python重大資訊趴蟲

Msx Wu
WU TH Max
Mar 31, 2021

--

繼上篇 實踐排程公開資訊觀測站爬蟲API並寫信通知(1)Python爬蟲

後來才發現開發不符業務部門所需

真正查詢需求在”公告查詢/取得或處分資產公告“中
公告種類可以直接指定 排序 市場別等等也相同

一樣透過Chrome Dev Tool Network去側錄了解HTTP Request情形,得知parameter的編寫情形

觀察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回傳

--

--