操做系統:Windows Python版本:3.5.2python
當你想查詢一下火車票信息的時候,你還在上 12306 官網嗎?或是打開你手機裏的 APP? 下面讓咱們來用 Python 寫一個命令行版的火車票查看器, 只要在命令行一敲就能得到你想要的火車票信息!若是你剛掌握了 Python 基礎,這將是個不錯的小練習。 效果圖: chrome
若你的環境中沒有requests模塊,直接使用pip安裝。瀏覽器
pip install requestsurl
注:Requests庫使用介紹詳見 https://blog.csdn.net/i_chaoren/article/details/63266154操作系統
首先咱們打開12306的票價查詢頁面: https://kyfw.12306.cn/otn/leftTicket/init 以chrome爲例,按下F12打開瀏覽器開發者編輯模式。隨便輸入起點終點,和開始日期,點擊查詢。.net
而後你就會看到開發者模式的network選項裏會顯示出來瀏覽器頁面加載的文件,就像下圖這樣: 命令行
看不出什麼?那咱們再從新點擊查詢按鈕好幾回,你會發現瀏覽器跟着你的點擊發起了好幾回查詢請求,就像下圖這樣,我這裏用紅框幫你標出來了: 在這些查詢請求裏,咱們找一個點進去,看看它到底請求了點什麼東西。 能夠看到在點擊查詢按鈕的時候,瀏覽器發起了一個名爲 https://kyfw.12306.cn/otn/leftTicket/queryX?leftTicketDTO.train_date=2019-03-10&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=HHC&purpose_codes=ADULT 的請求。咱們來仔細看看這個url裏面,train_date,from_station 以及 to_station 是否是分別表明着火車出發日期,始發站,終點站?3d
咱們直接把這個url貼到瀏覽器裏看看: code
是否是發現了什麼?對了,這其實裏面就包含了咱們須要的火車票信息數據!!!cdn
那咱們是否是隻要在代碼裏把咱們本身須要查詢的火車出發日期,始發站,終點站填進這個url,而後把返回的這些數據過濾一下顯示出來就好了?
可是且慢,細心的同窗會發現,from_station 和 to_station 裏面的都不是正常的中文地名,而是代號,咱們不能直接把中文地名填進url,而是須要把中文地名轉換成代號,那這個代號又是哪裏來的呢?
咱們再看這個url請求12306響應了的東西:
能夠在「map」裏看到,城市火車站代號和城市火車站是有一一對應的關係的,那這些一一對應的關係又是藏在哪裏的呢? 咱們點擊開發者模式的Sources選項,通過耐心查找,咱們發現了一個東西,見下圖:
看名字是否是以爲發現了什麼? 咱們把這個路徑寫成url貼進瀏覽器試試: https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9098
就這樣成功發現了全國的火車站的名字及代號對應表!!!
因爲 12306 的接口常常變化,本文提供的代碼可能會很快過時,若是遇到接口問題,須要根據最新的接口對代碼進行適當修改才能夠完成這個應用。
好了,那如今代碼的實現思路就有了。 我來給你梳理一下:
關注公衆號「Python專欄」,後臺回覆「12306」獲取完整代碼~