當前位置:
首頁 > 知識 > 是程序員就用 Python 查 12306 的票!| 技術頭條

是程序員就用 Python 查 12306 的票!| 技術頭條

是程序員就用 Python 查 12306 的票!| 技術頭條

打開今日頭條,查看更多圖片

作者 | 遠方的家

責編 | 胡巍巍

當你想查詢一下火車票信息的時候,你還在上12306官網嗎?或是打開你手機里的App?

下面讓我們來用Python寫一個命令行版的火車票查看器, 只要在命令行一敲就能獲得你想要的火車票信息!如果你剛掌握了Python基礎,這將是個不錯的小練習。

前言

操作系統:Windows

Python版本:3.5.2

是程序員就用 Python 查 12306 的票!| 技術頭條

效果圖

安裝Requests庫

若你的環境中沒有requests模塊,直接使用pip安裝。

pip install requests

Requests庫使用介紹詳見:

  • https://blog.csdn.net/i_chaoren/article/details/63266154

代碼實現思路

首先我們打開12306的票價查詢頁面:

https://kyfw.12306.cn/otn/leftTicket/init

以chrome為例,按下F12打開瀏覽器開發者編輯模式。隨便輸入起點終點,和開始日期,點擊查詢。

然後你就會看到開發者模式的network選項里會顯示出來瀏覽器頁面載入的文件,就像下圖這樣:

是程序員就用 Python 查 12306 的票!| 技術頭條

看不出什麼?那我們再重新點擊查詢按鈕好幾次,你會發現瀏覽器跟著你的點擊發起了好幾次查詢請求,就像下圖這樣,我這裡用紅框幫你標出來了:

是程序員就用 Python 查 12306 的票!| 技術頭條

在這些查詢請求里,我們找一個點進去,看看它到底請求了點什麼東西。

是程序員就用 Python 查 12306 的票!| 技術頭條

可以看到在點擊查詢按鈕的時候,瀏覽器發起了一個名為

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是不是分別代表著火車出發日、始發站、終點站?

我們直接把這個URL貼到瀏覽器里看看:

是程序員就用 Python 查 12306 的票!| 技術頭條

是不是發現了什麼?

對了,這其實裡面就包含了我們需要的火車票信息數據!!!

那我們是不是只要在代碼里把我們自己需要查詢的火車出發日期,始發站,終點站填進這個URL,然後把返回的這些數據過濾一下顯示出來就行了?

但是且慢,細心的同學會發現,from_station 和 to_station裡面的都不是正常的中文地名,而是代號,我們不能直接把中文地名填進URL,而是需要把中文地名轉換成代號,那這個代號又是哪裡來的呢?

我們再看這個URL請求12306響應了的東西:

是程序員就用 Python 查 12306 的票!| 技術頭條

可以在「map」里看到,城市火車站代號和城市火車站是有一一對應的關係的,那這些一一對應的關係又是藏在哪裡的呢?

我們點擊開發者模式的Sources選項,經過耐心查找,我們發現了一個東西,見下圖:

是程序員就用 Python 查 12306 的票!| 技術頭條

看名字是不是覺得發現了什麼?

我們把這個路徑寫成URL貼進瀏覽器試試:

https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9098

是程序員就用 Python 查 12306 的票!| 技術頭條

就這樣成功發現了全國的火車站的名字及代號對應表!!!

總結

由於12306的介面經常變化,本文提供的代碼可能會很快過期,如果遇到介面問題,需要根據最新的介面對代碼進行適當修改才可以完成這個應用。

好了,那現在代碼的實現思路就有了。

我來給你梳理一下:

  1. 填入你需要的出行日期、始發站、終點站。
  2. 將獲取到的中文始發站終點站,通過全國的火車站的名字及代號對應錶轉換成代號,再拼接成查詢URL,去查詢數據。
  3. 過濾並顯示查詢結果。

作者簡介:上海小胖,四大諮詢的Tech Lead,MongoDB Professional獲得者。「Python專欄」專註Python領域的各種技術:爬蟲、DevOps、人工智慧、Web開發等。還有「大航海計劃」,各種內推活動。

本文系作者投稿,版權歸作者所有。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

蘋果高通 5G 開戰!
九種跨域方式的實現原理,第一個就超驚艷!| 技術頭條

TAG:CSDN |