首先看看如何快速查看剩余火車票?
當你想查詢一下火車票信息的時候,你還在上12306官網嗎?或是打開你手機里的APP?下面讓我們來用Python寫一個命令行版的火車票查看器, 只要在命令行敲一行命令就能獲得你想要的火車票信息!如果你剛掌握了Python基礎,這將是個不錯的小練習。
接口設計
一個應用寫出來最終是要給人使用的,哪怕只是給你自己使用。所以,首先應該想想你希望怎么使用它?讓我們先給這個小應用起個名字吧,既然及查詢票務信息,那就叫它tickets好了。我們希望用戶只要輸入出發站,到達站以及日期就讓就能獲得想要的信息,所以tickets應該這樣被使用:
$ tickets from to date
另外,火車有各種類型,高鐵、動車、特快、快速和直達,我們希望可以提供選項只查詢特定的一種或幾種的火車,所以,我們應該有下面這些選項:
-g 高鐵 -d 動車 -t 特快 -k 快速 -z 直達這幾個選項應該能被組合使用,所以,最終我們的接口應該是這個樣子的:
$ tickets [-gdtkz] from to date
接口已經確定好了,剩下的就是實現它了。
開發環境
寫Python程序的一個良好實踐是使用virtualenv這個工具建一個虛擬的環境。我們的程序使用Python3開發,下面在你的工作目錄下建一個文件夾tickets,進去創建一個虛擬環境:
$ virtualenv -p /usr/bin/python3 venv
通過下面的命令激活它:
$ . venv/bin/activate
解析參數
Python有很多寫命令行應用的工具,如argparse, docopt, options...這里,我們選用docopt這個簡單易用的工具,我們先安裝它:
$ pip3 install docopt
docopt可以按我們在文檔字符串中定義的格式來解析參數,在tickets.py中:
下面我們運行一下這個程序:
$ python3 tickets.py 上海 北京 2016-07-01
我們得到下面的參數解析結果:
獲取數據
參數已經解析好了,下面就是如何獲取數據了,這也是最主要的部分。首先我們打開12306,進入余票查詢頁面,如果你使用chrome,那么按F12打開開發者工具,選中Network一欄,在查詢框鐘我們輸入上海到北京,日期2016-07-01, 點擊查詢,我們在調試工具發現,查詢系統實際上請求了這個URL
https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-07-01&from_station=SHH&to_station=BJP
新聞熱點
疑難解答