使用模擬器做台鐵訂票爬蟲 | python自動訂票
在一連串爬蟲的研究之後會體悟一點,玩爬蟲是不是都必須具備高深的javascript和網路概念的人才能玩?答案是否的,不過你具備這些能力的話,會更事半功倍。基本上爬蟲就是模擬人類的動作去執行,所以其實我們可以透過一些模擬器來做到同樣的動作。在「工欲善其事,必先利其器(下)[1]」這篇底下Wolke有提到puppeteer這套google原生的High-levelbrowseranimation,這次我們就來延伸這幾天台鐵訂票的主題,用simulator來改寫訂票流程吧。ps.模擬器的本意其實是拿來做前端測試用的XD先demo一下成果...Puppeteer[2]的文件非常的完整,尤其是...
在一連串爬蟲的研究之後會體悟一點,玩爬蟲是不是都必須具備高深的 javascript 和網路概念的人才能玩?答案是否的,不過你具備這些能力的話,會更事半功倍。基本上爬蟲就是模擬人類的動作去執行,所以其實我們可以透過一些模擬器來做到同樣的動作。
在「工欲善其事,必先利其器(下)[1]」這篇底下 Wolke 有提到 puppeteer 這套 google 原生的 High-level browser animation,這次我們就來延伸這幾天台鐵訂票的主題,用 simulator 來改寫訂票流程吧。
ps. 模擬器的本意其實是拿來做前端測試用的XD
先 demo 一下成果...
Puppeteer[2] 的文件非常的完整,尤其是他的 api document[3],乾淨且清楚,也有許多範例和衍伸應用[4],所以對剛接觸的朋友應該會覺得非常的親切。
而台鐵的訂票網站,我們在其幾篇已經探訪過很多次了,這邊就不再多綴了,就讓我們一起進入研究部分吧。
做純 Javascript 的爬蟲跟 simulator 的爬蟲在探訪上其實很不一樣,js 的爬蟲要看的重點是在 network、request、response 這些,但 simulator 在探訪上是去紀錄人在流程上所操作的每個動作。
例如說我們要送個表單,對於 js request 你要注意的是 url、method、cookie、header、query string、form body...等等。而對比 simulator 你必須注意的是點了點哪個欄位、輸入了什麼數值、點了什麼按鈕、等待什麼產生...等等。
若我們要成功地完成訂購,那麼我們會將流程切分成以下四個:
填入乘車資訊流程 處理驗證碼 送出驗證碼 取得訂票代號 填入乘車資訊流程一樣進入 http://railway.hinet.net/ctno1.htm[5] ,然後會依序填入五個輸入項目,包含 #person_id、#from_station、#to_st...