Obtaining railway station
stations.py
#import certifi #import urllib3 import re import requests from pprint import pprint url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9001' response = requests.get(url, verify=False) stations = re.findall('([\u4e00-\u9fa5]+)\|([A-Z]+)',response.text) print(dict(stations)) #pprint(dict(stations),indent=4)
Based on origin, destination, time of the query
# ! / Usr / bin / Python the env # Coding: UTF-. 8 "" " ticket viewer command the Usage: 12306 [-gdtkz] <from> <to> <DATE> the Options: -H, - Help display help -g high-speed rail -d EMU -t Express -k fast -z direct Example: 12306 Shanghai Beijing 2016-12-16 12306 -dg Shanghai Beijing 2016-12-16 PIP install Requests Prettytable docopt Colorama #prettytable formatting tools #docopt is location parameter parsing command line tool python3 #colorama display color is to add "" " Import Requests from docopt Import docopt Import SYS # Sys.path.append (R & lt "/ Py / Stations") from Stations Import Stations Import JSON from Prettytable Import Prettytable class TrainsCollections: header = ' train station over time First Second soft sleeper seat with no seat ' .split () DEF the __init__ (Self, available_tranins, Options): self.available_tranins = available_tranins self.options = Options DEF _get_duration (Self, raw_train): durations = raw_train.get ( ' Lishi' ) .Replace ( ' : ' , ' h ' ) + ' points ' return durations # decorators, this function is defined as the attribute, the function to be called other @Property DEF Trains (Self): for raw_train in self.available_tranins : train_no = raw_train [ ' station_train_code ' ] Initial = train_no [0] .lower () IF Not self.options or Initial in self.options: Train = [ train_no, '\n'.join([raw_train['from_station_name'],raw_train['to_station_name']]), '\n'.join([raw_train['start_time'],raw_train['arrive_time']]), self._get_duration(raw_train), raw_train['zy_num'], raw_train['ze_num'], raw_train['rw_num'], raw_train['yw_num'], raw_train['yz_num'], raw_train['wz_num'], ] #print(train) #生成器,一次返回一项 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(): ''' { '-d':True, '-g':True, '-k':False, '-t':False, '-z':False, '<date>':'2017-03-23', '<from>':'海口', '<to>':'北京'} ''' arguments = docopt(__doc__) print(arguments) from_station = stations.get(arguments['<from>']) to_station = stations.get(arguments['<to>']) date = arguments['<date> options =Get parameters, a list of analytical#] '''.join([k for k,v in arguments.items() if v is True]) url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(date,from_station,to_station) #url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT' r = requests.get(url,verify=False) print(url) #jjj = json.loads(str(r)) available_tranins1 = r.json()['data'] available_tranins = [] for available_tranins2 in available_tranins1: available_tranins.append(available_tranins2['queryLeftNewDTO']) #available_tranins = list(available_tranins.keys()) # print(available_tranins) #TrainsCollections(available_tranins,options).pretty_print() #available_tranins = available_tranins2['queryLeftNewDTO'] #print(available_tranins) #print(type(available_tranins[0])) TrainsCollections(available_tranins,options).pretty_print() if __name__ == '__main__': #TrainsCollections.cli() cli()