本文思路主要來源于實驗樓的教程,但是一些具體的一些細節是我自己發現的,比如哪里獲得站點對應的3位英文編號,怎么獲得這個查詢的url
本文用到的庫主要有requests(獲取url的內容),prettytable(讓文本輸出美觀),argparse(命令行參數解析)
關于這些庫怎么使用,可以參見我之前的博文
1、首先打開12306余票查詢的界面
https://kyfw.12306.cn/otn/lcxxcx/init
我們想要的信息當然就是在輸入了始發站、終點站和日期之后各車次的時間和車票余量,那么我們嘗試在始發站使用檢查元素,觀察一下它是怎么上傳始發站的信息的,那么我們不妨隨便輸入出發地、目的地和信息,使用抓包工具來看看它是怎么發包的(使用瀏覽器也可以,因為我們只需要查看包的內容,不需要更改包)
2、

在chrome的network中我們可以查看到我們點擊之后瀏覽器發送的所有包(關于http包的知識不熟悉的同學,可以看看《圖解http》這本書)

點擊查詢之后我們馬上就會注意到以query開頭的這個包,顯然這就是一個查詢指令,我們看看這個包的url
'https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-10-04&from_station=BJP&to_station=XKS'
然后我們看看它的response

仔細觀察就能發現它其實是一串json格式的字符串(要非常有經驗。。。。)
3、經過以上這些過程,我們大致就能知道我們需要做的是什么了,我們只需要更改url中的data,fromstaion,tostaion后面的內容,然后用requests獲得response,然后解析這一串json字符就行了。
但是我們會發現,日期還好說,對于fromstation和tostaion的代碼,我們該怎么辦呢?
4、有兩種可能,一中可能是這些文件在服務器上,每回改變站點網頁都會從服務器請求這個站點的代碼,還有一種可能是這個已經下載到本地了,如何判斷呢?我們不妨改變一下始發站,然后用抓包軟件(或者瀏覽器)觀察我們的瀏覽器是否向12306發送了包

把北京改成了上海,但是我們發現瀏覽器并沒有發送包
這樣我們基本可以肯定這個車站編號信息是存在本地了(已經從服務器下載下來)
5、我們這時候,就需要分析html來發現這個編號信息到底儲存在了那里
新聞熱點
疑難解答