使用python實(shí)現(xiàn)一個(gè)查詢火車票的小工具
主要功能:
1匹舞、輸入出發(fā)車站,到達(dá)車站线脚,時(shí)間赐稽,然后返回所有的車次信息,和余票信息
2浑侥、支持輸入附加選項(xiàng)查詢不同的火車的類型姊舵,比如高鐵,動(dòng)車寓落。
#查詢上海到北京2017-04-25的高鐵和動(dòng)車的車票括丁,-g -d 是附加選項(xiàng) 表示高鐵和動(dòng)車
python3 trains.py -gd 上海 北京 2017-04-25
運(yùn)行結(jié)果:運(yùn)行結(jié)果
1. 對(duì)12306網(wǎng)站買票過(guò)程抓包分析
點(diǎn)擊查詢之后,通過(guò)抓包發(fā)現(xiàn)返回了一個(gè)json的文件伶选,查看這個(gè)文件史飞,就是保存著具體車次的信息。抓包如下圖所示仰税。
抓包結(jié)果
請(qǐng)求的url 是:
GET /otn/leftTicket/query?leftTicketDTO.train_date=2017-04-20&leftTicketDTO.from_station=TJP&leftTicketDTO.to_station=TYV&purpose_codes=ADULT HTTP/1.1
請(qǐng)求
截圖
js文件
2. 使用正則表達(dá)式處理這個(gè)js文件
使用正則表達(dá)式蠢笋,將js 文件里面的車站名字和對(duì)應(yīng)的簡(jiǎn)稱提取出來(lái),然后寫入到一個(gè)station.py 文件里面鳞陨,作為字典昨寞,程序運(yùn)行的時(shí)候,將這個(gè)文件以模塊的形式包含進(jìn)去厦滤。
截圖
截圖
運(yùn)行的時(shí)候:
# 將輸出重定向到一個(gè)新的文件stations.py里面
python3 test3.py > stations.py
3. 使用docopt 優(yōu)雅的完成命令行的輸入
docopt 是一個(gè)很優(yōu)雅的處理輸入的一個(gè)模塊享怀,docopt可以根據(jù)你寫的文檔描述,可以自動(dòng)為你生成解析器趟咆,可以非常容易的為你的python程序創(chuàng)建命令行界面添瓷。
4. 主程序
4.1 處理url截圖
image
運(yùn)行結(jié)果:
image