follow "finlab"學習如何抓取資料後,到了第三篇的抓取"綜合損益表",怎麼搞都沒有資料
發現可以用Chrome的"檢查",來探詢我們需要的資訊
一般來說有兩種不同的資料傳遞方式
Get的資料傳遞方式:
使用get的網頁,可以發現在網址內可以看出傳遞的參數
例如
https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date=20190908&stockNo=0050&_=1567946426100
你會發現
date 時間是 "20190908"
stockNo查詢的股票代碼是"0050"
response=json 是資料格式
Post的資料傳遞方式:
最明顯的方法可以從網址上發現,使用post的網頁,就無法從網址看出來
得利用工具Chrome 按右鍵的"檢查",來找出傳給網頁的參數是什麼
原因是這種Post的資料傳遞方式,是用來判斷是否為爬從機器人來抓取資料,也因此只要在Python程式碼中加入這項資訊,便可以騙過伺服器,也許今天可以,明天該伺服器判斷的方式又被升級而不同。
我們在python的程式裏頭,得先將所需的資訊,放在payload 將"Form Data" 寫進去,還要再將我們自己瀏覽器的資訊給放進header內,這樣才能騙過伺服器,問到我們想要的資料。
如同以下的程式,爬蟲需要幾個model:(2021/06/06 update)
- request:用來擷取網頁資訊,但是他常常也會將整個html裏頭的資訊也一併帶回來,這些資訊得先處理過,才能真正只擷取我們需要的資訊。
- BeautifulSoup:用來將爬來的資訊整理成pandas dataframe,以利後續的分析
payload={ |
程式的資料輸出到dfs內,就樣就爬到我們想要的資料了
Reference
- https://www.finlab.tw/Python-財報爬蟲-1-綜合損益表/ --> 大致上都對,但是抓不到資料
- https://www.youtube.com/watch?v=Ef0kh6NPiBE --> 教導 request.post的眉角
- https://www.diffen.com/difference/GET-vs-POST-HTTP-Requests --> 解釋什麼是 get vs request
留言列表