Python查詢12306餘票
一、requests等庫的介紹
requests:傳送請求,獲取響應內容
docopt:命令列解析工具,可以根據自定義的語法格式,自動生成解析器
prettytable:使用表格形式列印資料
colorama:命令列著色
二、開發環境搭建
下載Python2的安裝檔案[windows版]
安裝Python2
此處省略N個字
配置環境變數
修改環境變數Path,追加Python2的安裝路徑[C:\Python27]
檢查環境是否正常
給eclipse工具安裝Aptana外掛
配置eclipse
設定python直譯器的路徑[C:\Python27\python.exe]
三、安裝相關的庫
安裝requests庫
安裝docopt庫
pip install docopt
安裝prettytable庫
pip install prettytable
安裝colorama庫
pip install colorama
四、建立一個python工程
在eclipse裡面建立一個python工程,如下圖:
五、設計一個字典stations
stations字典裡面的資料為:站點和對應編碼
程式碼如下:
# coding:utf-8
stations = { 'ZhenJiang': 'ZJH', #鎮江
'ZhenJiangNan': 'ZEH', #鎮江南
'ShangHai': 'SHH'} #上海
附截圖(程式碼檔名為stations.py):
六、編寫查詢餘票的程式
程式碼如下:
# coding:utf-8
"""命令列火車票檢視器
Usage:
tickets [-gdtkz] <from> <to> <date>
"""
from docopt import docopt
from stations import stations
import requests
from prettytable import PrettyTable
from colorama import init, Fore
init()
class TrainsCollection:
header = '車次 車站 時間 經歷時 一等座 二等座 高階軟臥 軟臥 硬臥 硬座 無座'.split()
def __init__(self, available_trains,available_place, options):
"""查詢的火車班次集合
:param available_trains: 一個列表, 包含可獲得的火車班次, 每個
火車班次是一個字典
:param options: 查詢的選項, 如高鐵, 動車, etc...
"""
self.available_trains = available_trains
self.available_place = available_place
self.options = options
@property
def trains(self):
for raw_train in self.available_trains:
raw_train_list = raw_train.split('|')
train_no = raw_train_list[3]
initial = train_no[0].lower()
duration = raw_train_list[10]
if initial in self.options:
train = [
train_no,
'\n'.join([Fore.LIGHTGREEN_EX + self.available_place[raw_train_list[6]] + Fore.RESET,
Fore.LIGHTRED_EX + self.available_place[raw_train_list[7]] + Fore.RESET]),
'\n'.join([Fore.LIGHTGREEN_EX + raw_train_list[8] + Fore.RESET,
Fore.LIGHTRED_EX + raw_train_list[9] + Fore.RESET]),
duration,
raw_train_list[-6] if raw_train_list[-6] else '--',
raw_train_list[-7] if raw_train_list[-7] else '--',
raw_train_list[-12] if raw_train_list[-12] else '--',
raw_train_list[-14] if raw_train_list[-14] else '--',
raw_train_list[-9] if raw_train_list[-9] else '--',
raw_train_list[-8] if raw_train_list[-8] else '--',
raw_train_list[-11] if raw_train_list[-11] else '--',
]
yield train
def pretty_print(self):
pt = PrettyTable()
pt._set_field_names(self.header)
for train in self.trains:
pt.add_row(train)
print(pt)
def cli():
"""command-line interface"""
arguments = docopt(__doc__)
from_station = stations.get(arguments['<from>'])
to_station = stations.get(arguments['<to>'])
date = arguments['<date>']
url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(
date, from_station, to_station)
r = requests.get(url, verify=False)
available_trains = r.json()['data']['result']
available_place = r.json()['data']['map']
options = ''.join([
key for key, value in arguments.items() if value is True
])
TrainsCollection(available_trains,available_place, options).pretty_print()
if __name__ == '__main__':
cli()
附截圖(程式碼檔名為tickets.py):
七、設定出發站、目的站等引數
Eclipse裡面設定相關的引數,引數列表內容如下:
-gd ShangHai ZhenJiang 2018-01-28
附截圖:
八、執行查詢餘票的指令碼
在eclipse裡執行該指令碼
附截圖:
相關文章
- 列車車次查詢-餘票查詢-Api介面API
- 是程式設計師就用Python查12306的票程式設計師Python
- Python3.6實現12306火車票自動搶票Python
- Python學習筆記之12306搶票Python筆記
- 銀聯卡線上餘額查詢
- 12306火車票搶票Python程式碼最新完整版釋出,五一搶票就靠它了!Python
- 公積金餘額查詢電話
- 最新12306搶票爬蟲爬蟲
- Python查詢-二分查詢Python
- 分享12306搶票心得-最終篇
- 12306火車票訂票系統的伸縮擴充套件套件
- 四、基於HTTPS協議的12306搶票軟體設計與實現--水平DNS併發查詢分享HTTP協議DNS
- python 字串查詢Python字串
- 使用Python編寫一個多執行緒的12306搶票程式Python執行緒
- PostgreSQL與12306搶火車票的思考SQL
- 分享12306秒票心得及殺手鐗
- 分享12306秒票殺手鐗原始碼原始碼
- 12306手機App明起新增正晚點查詢功能APP
- 教你用Python動重新整理搶12306火車票,附原始碼!Python原始碼
- oracle 剩餘表空間查詢慢,解決辦法Oracle
- python天氣查詢Python
- 忘記12306!用 Python3 實現自己的火車票檢視器!Python
- Java財政票據查驗介面、醫療票據查驗、發票驗真介面Java
- 巧用“查詢替換”刪除Word文件多餘的空行(轉)
- Python模組查詢路徑Python
- [python]pymongo查詢與修改PythonGo
- Python中字串查詢方法Python字串
- 數電票如何查驗、管理?C#發票查驗介面整合C#
- 太人性了!12306客戶端新增火車正晚點查詢客戶端
- 12306 出招搶票軟體,技術黃牛生意要“黃”?
- 從零實現一款12306搶票軟體
- 多家搶票軟體回應12306資料洩漏
- 12306搶票系統無介面版本——(1)登入(12306驗證碼問題破解)
- 12306被噴誰受益?帶著正能量重新設計12306防黃牛購票機制
- python實現查詢糾錯Python
- python二分查詢模板Python
- Python小技巧 - 子串查詢Python
- python 當中的模糊查詢Python