1. 程式人生 > >使用Python爬蟲查詢12306列車資訊

使用Python爬蟲查詢12306列車資訊

我們先隨意設定出發地和目的地,這裡選擇了鄭州-哈爾濱,然後開啟開發者工具,再點選查詢得到如下資訊:
這裡寫圖片描述

分別檢視這兩個結果,可以從第二個裡面發現如下資訊:
這裡寫圖片描述

由於得到的result資料是由“|”隔開的,所以需要對字串進行切割,然後判斷不同資訊所在的索引。這裡由於資料比較多就不上傳尋找的過程了,直接給結果,比如我們要查詢硬座的資訊,它的索引是29,如果要查詢其他型別的座位只需要改動索引或者再加一些判斷輸出所有資訊也可以(關於有座的車次,12306有的顯示“有”,有的顯示是具體數字,所以做了如下處理。):
這裡寫圖片描述

至此我們就得到了2017年10月31號鄭州-哈爾濱硬座有座位的車次資訊了:
這裡寫圖片描述

那如果要得到任意時間任意城市間的列車資訊呢?我們繼續分析Headers裡面的資訊
這裡寫圖片描述

在這裡我們可以發現前三個值分別是日期、出發地的城市名代號、目的地的城市名代號,由此可以自己構造URL,由於這裡面的出發地和目的地不是用中文表示的,所以還需要做一些轉化:http://www.pm-road.com/index.php/2014/09/01/86/
我在這裡找到了對應關係,資料比較混亂需要自己提取一下,我處理完之後以字典的格式儲存成了TXT文字以便查詢:
這裡寫圖片描述

然後以如下兩個函式查詢對應的城市碼,考慮到兩次查詢城市碼都要讀取檔案再做成字典比較耗時間,所以寫成了兩個函式,trainCode()在程式碼執行開始就執行完返回一個字典:
這裡寫圖片描述

接下來就是構造URL啦,從鍵盤輸入日期和出發地、目的地:
這裡寫圖片描述

至此整個程式碼就完成啦!至於破解驗證碼…自動搶票..我就不會啦!可以去問大佬..從我的程式碼風格和渣渣手法應該能看出來我才學Python沒多少天..萌新
執行一下:(別忘了這裡只顯示硬座的資訊)
這裡寫圖片描述