python图像识别车票_是程序员就用Python查12306的票
0.環境
操作系統:Windows
Python版本:3.5.2
1.前言
當你想查詢一下火車票信息的時候,你還在上 12306 官網嗎?或是打開你手機里的 APP?
下面讓我們來用 Python 寫一個命令行版的火車票查看器, 只要在命令行一敲就能獲得你想要的火車票信息!如果你剛掌握了 Python 基礎,這將是個不錯的小練習。
效果圖:
2.安裝Requests庫
若你的環境中沒有requests模塊,直接使用pip安裝。
pip install requests
3.代碼實現思路
首先我們打開12306的票價查詢頁面:
https://kyfw.12306.cn/otn/leftTicket/init
以chrome為例,按下F12打開瀏覽器開發者編輯模式。隨便輸入起點終點,和開始日期,點擊查詢。
然后你就會看到開發者模式的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 是不是分別代表著火車出發日期,始發站,終點站?
我們直接把這個url貼到瀏覽器里看看:
是不是發現了什么?
對了,這其實里面就包含了我們需要的火車票信息數據!!!
那我們是不是只要在代碼里把我們自己需要查詢的火車出發日期,始發站,終點站填進這個url,然后把返回的這些數據過濾一下顯示出來就行了?
但是且慢,細心的同學會發現,from_station 和 to_station 里面的都不是正常的中文地名,而是代號,我們不能直接把中文地名填進url,而是需要把中文地名轉換成代號,那這個代號又是哪里來的呢?
我們再看這個url請求12306響應了的東西:
可以在“map”里看到,城市火車站代號和城市火車站是有一一對應的關系的,那這些一一對應的關系又是藏在哪里的呢?
我們點擊開發者模式的Sources選項,經過耐心查找,我們發現了一個東西,見下圖:
4.總結
由于 12306 的接口經常變化,本文提供的代碼可能會很快過期,如果遇到接口問題,需要根據最新的接口對代碼進行適當修改才可以完成這個應用。
好了,那現在代碼的實現思路就有了。
我來給你梳理一下:
填入你需要的出行日期、始發站、終點站。
將獲取到的中文始發站終點站,通過全國的火車站的名字及代號對應表轉換成代號,再拼接成查詢url,去查詢數據。
過濾并顯示查詢結果。
關注公眾號「Python專欄」,后臺回復「12306」獲取完整代碼~
總結
以上是生活随笔為你收集整理的python图像识别车票_是程序员就用Python查12306的票的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: threadpooltaskexecut
- 下一篇: python循环变颜色_在Python中