使用python腳本實(shí)現(xiàn)查詢(xún)火車(chē)票工具
使用python腳本實(shí)現(xiàn)查詢(xún)火車(chē)票信息的效果圖如下:
實(shí)現(xiàn)的代碼:
# coding: utf-8 """命令行火車(chē)票查看器 Usage: tickets [-gdtkz] Options: -h,--help 顯示幫助菜單 -g 高鐵 -d 動(dòng)車(chē) -t 特快 -k 快速 -z 直達(dá) Example: tickets 北京 上海 2016-10-10 tickets -dg 成都 南京 2016-10-10 """ import json import requests import prettytable from docopt import docopt from colorama import init, Fore class CollectInfo: def __init__(self): self.qurey_ret = [] self.header = ['車(chē)次信息', '發(fā)/到時(shí)間', '發(fā)/到站', '歷時(shí)', '票價(jià)', '余票'] # 獲取車(chē)次相關(guān)的所有信息 def query_html_ret(self, query_args): url = 'http://api.12306.com/v1/train/trainInfos?arrStationCode={to_station}&deptDate={date}\ &deptStationCode={source_station}&findGD=false'.format(to_station=query_args['to_station'], source_station=query_args['source_station'], date=query_args['date']) row_ret = requests.get(url) return row_ret.json() # 解析獲取到的結(jié)果 def paser_ret(self, row_ret): trains_info = row_ret['data']['trainInfos'] for info in trains_info: row_info = [] # 獲取車(chē)次信息 row_info.append('\n' + info['trainCode']) # 獲取車(chē)次到站時(shí)間信息 row_info.append('\n' + '\n'.join([Fore.GREEN + info['deptTime']+ Fore.RESET, Fore.RED + info['arrTime']+ Fore.RESET])) # 獲取車(chē)次站點(diǎn)名稱(chēng) row_info.append('\n' + '\n'.join([Fore.GREEN + info['deptStationName'] + Fore.RESET, Fore.RED + info['arrStationName']+ Fore.RESET])) # 獲取車(chē)次到達(dá)站點(diǎn)所需時(shí)間 row_info.append('\n' + info['runTime']) # 獲取票價(jià)以及余票信息 seat_price = [] seat_num = [] for seat in info['seatList']: seat_price.append(seat['seatName'] + ':' + seat['seatPrice']) if int(seat['seatNum']) > 10: ticknum = Fore.GREEN + seat['seatNum'] + Fore.RESET else: ticknum = seat['seatNum'] seat_num.append(ticknum) row_info.append('\n'.join(seat_price)) row_info.append('\n'.join(seat_num)) self.qurey_ret.append(row_info) self.qurey_ret.append([' ', ' ', ' ', ' ', ' ', ' ']) return self.qurey_ret def show_with_table(self): ticket_table = prettytable.PrettyTable() ticket_table.field_names = self.header for row in self.qurey_ret: if len(row) == 0: continue ticket_table.add_row(row) return ticket_table def main(): arguments = docopt(__doc__) query_args = {} init() # 獲取所有站點(diǎn)信息(stations.txt信息通過(guò) 函數(shù)獲取) # https: // kyfw.12306.cn / otn / resources / js / framework / station_name.js?station_version = 1.8971 f = open('stations.txt', 'r') info = f.read() stations_info = json.loads(info) # 從所有站點(diǎn)信息中獲取所要查詢(xún)站點(diǎn)的代碼信息 query_args['to_station'] = stations_info[arguments['']] query_args['source_station'] = stations_info[arguments['']] query_args['date'] = arguments[''] # 向12306查詢(xún),得到跟車(chē)次相關(guān)的所有信息 collect_train = CollectInfo() row_ret = collect_train.query_html_ret(query_args) collect_train.paser_ret(row_ret) table = collect_train.show_with_table() print(table) if __name__ == '__main__': main()
總結(jié)
以上所述是小編給大家介紹的使用python腳本查詢(xún)火車(chē)票工具,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Python腳本實(shí)現(xiàn)12306火車(chē)票查詢(xún)系統(tǒng)
- Python實(shí)現(xiàn)12306火車(chē)票搶票系統(tǒng)
- python實(shí)現(xiàn)12306火車(chē)票查詢(xún)器
- 利用Python實(shí)現(xiàn)命令行版的火車(chē)票查看器
- 基于Python3.6+splinter實(shí)現(xiàn)自動(dòng)搶火車(chē)票
- 基于Python實(shí)現(xiàn)快遞信息提取
- python實(shí)現(xiàn)快遞價(jià)格查詢(xún)系統(tǒng)
- Python編寫(xiě)車(chē)票訂購(gòu)系統(tǒng)?Python實(shí)現(xiàn)快遞收費(fèi)系統(tǒng)
相關(guān)文章
Keras中Sequential模型和Functional模型的區(qū)別及說(shuō)明
這篇文章主要介紹了Keras中Sequential模型和Functional模型的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12詳解vscode實(shí)現(xiàn)遠(yuǎn)程linux服務(wù)器上Python開(kāi)發(fā)
這篇文章主要介紹了vscode實(shí)現(xiàn)遠(yuǎn)程linux服務(wù)器上Python開(kāi)發(fā),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11tensorflow實(shí)現(xiàn)在函數(shù)中用tf.Print輸出中間值
今天小編就為大家分享一篇tensorflow實(shí)現(xiàn)在函數(shù)中用tf.Print輸出中間值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Python+OpenCV實(shí)現(xiàn)旋轉(zhuǎn)文本校正方式
今天小編就為大家分享一篇Python+OpenCV實(shí)現(xiàn)旋轉(zhuǎn)文本校正方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01python中判斷文件編碼的chardet(實(shí)例講解)
下面小編就為大家分享一篇python中判斷文件編碼的chardet(實(shí)例講解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Python爬蟲(chóng)DNS解析緩存方法實(shí)例分析
這篇文章主要介紹了Python爬蟲(chóng)DNS解析緩存方法,結(jié)合具體實(shí)例形式分析了Python使用socket模塊解析DNS緩存的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2017-06-06Django解決無(wú)法從request.POST中獲取URL傳進(jìn)來(lái)的參數(shù)
這篇文章主要介紹了Django解決無(wú)法從request.POST中獲取URL傳進(jìn)來(lái)的參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Python中用pycurl監(jiān)控http響應(yīng)時(shí)間腳本分享
這篇文章主要介紹了Python中用pycurl監(jiān)控http響應(yīng)時(shí)間腳本分享,本文腳本實(shí)現(xiàn)監(jiān)控http相應(yīng)碼,響應(yīng)大小,建立連接時(shí)間,準(zhǔn)備傳輸時(shí)間,傳輸?shù)谝粋€(gè)字節(jié)時(shí)間,完成時(shí)間,需要的朋友可以參考下2015-02-02PyQt使用QPropertyAnimation開(kāi)發(fā)簡(jiǎn)單動(dòng)畫(huà)
這篇文章主要介紹了PyQt使用QPropertyAnimation開(kāi)發(fā)簡(jiǎn)單動(dòng)畫(huà),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04