程式設計師的我是如何搶票的(Python) | 搶票程式撰寫
馬上就要回家過年了,你的票買好了嗎。雖然我不用搶票,但是還是研究了一下怎麼搶票。程式設計師嘛,就是要對一切問題進行解構,探索原理本質,尋找規律,將其自動化。。。好了,言歸正傳,開始。1.首先,開啟12306網。選個自己要買的路段,我這裡是隨便選的。然後點選查詢。2.按下F12,設定如紅色框。然後重新點選查詢,看看瀏覽器都發送了什麼給伺服器。從下圖看,是傳送了兩條。3.分別點擊發送的兩條,檢視返回結果。可以看到第二條裡面有當前網頁車票相關的資訊。比如“有”就是顯示在網頁上面的車票後面的有字,“大連”就是出發站資...
馬上就要回家過年了,你的票買好了嗎。
雖然我不用搶票,但是還是研究了一下怎麼搶票。
程式設計師嘛,就是要對一切問題進行解構,探索原理本質,尋找規律,將其自動化。。。
好了,言歸正傳,開始。
1.首先,開啟12306網。選個自己要買的路段,我這裡是隨便選的。
然後點選查詢。
2.按下F12,設定如紅色框。然後重新點選查詢,看看瀏覽器都發送了什麼給伺服器。
從下圖看,是傳送了兩條。
3.分別點擊發送的兩條,檢視返回結果。可以看到第二條裡面有當前網頁車票相關的資訊。比如“有”就是顯示在網頁上面的車票後面的有字,“大連”就是出發站資訊。於是,我們知道車票資訊是在這裡面。實際這是個json格式的資料。
4.繼續檢視這條請求訪問的連結。如下。
於是,我們可以用requests庫來模擬瀏覽器訪問。很簡單,具體寫作如下:
5.那麼,如下圖車票的有無資訊是如何提取出來呢?
仔細觀察發現,“有”“無”“-”資訊是用“|”線來分割的。而且為了防止爬取,順序是和網頁顯示不一樣的。探究規律如下:
數字意思:軟臥 23 意思是第23個字元內容對應的是軟臥的有無票狀態。
無座 26軟臥 23硬座 29硬臥 28特等商務座 32一等座 31二等座 30
這裡,我們選擇硬座,如下編寫:
和上面的程式結合,執行如下:
6.與網頁對比,結果一致。D7411因為沒有票,所以被程式剔除。
7.到這裡,可以證明程式是可以獲取車票狀態的。那麼怎麼通知給我呢?
可以通過發郵件的方式。
8.但是郵件即時性不好,要是有票能自動打電話或者發簡訊就好了。
於是,找到了這樣的服務。
“阿里大於”可以提供有償的短息和語音服務。具體可以實現簡訊通知,或者電話通知,電話語音的內容是可...