主要核心代码:
Get_CityCode.py
import requests
def get_city():
target = "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9100"
req = requests.get(url=target)
station_names = req.text
station_names_new = station_names.replace("var station_names ='", "").split("@")
del station_names_new[0]
station_names_new[-1] = station_names_new[-1].replace("';", "")
number = len(station_names_new)
for i in range(0, number, 1):
station_names_new[i] = station_names_new[i].split("|")
station = {}
for j in range(0, number, 1):
station[station_names_new[j][1]] = station_names_new[j][2]
return station
if __name__ == "__main__":
print(get_city()['郑州'])
Get_TicketInfo.py
import requests
import Get_URL
import re
import Get_CityCode
from prettytable import PrettyTable
def city_code_name():
"""字典键值互换
前提:
键值唯一
返回互换后的字典
"""
city_code = Get_CityCode.get_city().copy()
code_name = dict(zip(city_code.values(), city_code.keys()))
return code_name
def get_ticket_info():
"""
re.sub(pattern, replace, string, count=0, flags=0)
pattern : 正则中的模式字符串。replace : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
"""
data = requests.get(url=Get_URL.geturl())
data1 = re.findall("\[.*\]", data.text)
'''data1是一个列表,格式为['["1","2","3"]']'''
data2 = data1[0]
"""data2是个字符串,晕死!!!"""
data3 = data2.replace("[", "").replace("]", "").split(",")
"""split 返回一个元组"""
number = len(data3)
# 车次数量
"""
format:
*|预订|*|车次|*|*|起始站|终点站|出发时间|到达时间|历时|*|*|*|*|*|*|*|*|*||高级软卧||软卧一等卧|||无座||
0| |2| |4,5 | |11-19| 20| 22 24 25 27
硬卧二等座|硬座|二等座|一等座|商务座特等座|动卧|*|*|*|*|*
|34 35 36 37 38
"""
del_list = [0, 2, 4, 5, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 27, 34, 35, 36, 37, 38]
del_number = len(del_list)
c = 0
for x in range(del_number):
del_list[x] = del_list[x] - c
c = c + 1
for i in range(number):
data3[i] = data3[i].split("|")
for j in range(del_number):
del data3[i][del_list[j]]
# 在迭代的过程中每删除一个元素,接下来将要删除的元素下标要减一,注意!
"""
format:
|预订|车次|起始站|终点站|出发时间|到达时间|历时|高级软卧|软卧一等卧|无座|硬卧二等座|硬座|二等座|一等座|商务座特等座|动卧|
Senior soft sleeper|soft sleeper first bedroom|no seat|hard sleeper second seat|hard seat|second class seat|
first class seat|business seat special seat|moving bedroom|
"""
finally_data = data3
train_numbers = len(finally_data)
start_station_key = [] # 起始站
to_station_key = [] # 终点站
start_time = [] # 出发时间
to_time = [] # 到达时间
cost_time = [] # 历时
train_code = [] # 车次
senior_soft = [] # 高级软卧
soft_first = [] # 软卧一等卧
no_seat = [] # 无座
hard_second = [] # 硬卧二等座
hard_seat = [] # 硬座
second_seat = [] # 二等座
first_seat = [] # 一等座
business_seat = [] # 商务座
moving_sleep = [] # 动卧
tips = [] # 提示信息
for i in range(train_numbers):
tips.append(finally_data[i][0])
train_code.append(finally_data[i][1])
start_station_key.append(city_code_name()[finally_data[i][2]])
to_station_key.append(city_code_name()[finally_data[i][3]])
start_time.append(finally_data[i][4])
to_time.append(finally_data[i][5])
cost_time.append(finally_data[i][6])
senior_soft.append(finally_data[i][7])
soft_first.append(finally_data[i][8])
no_seat.append(finally_data[i][9])
hard_second.append(finally_data[i][10])
hard_seat.append(finally_data[i][11])
second_seat.append(finally_data[i][12])
first_seat.append(finally_data[i][13])
business_seat.append(finally_data[i][14])
moving_sleep.append(finally_data[i][15])
"""
输出格式:
车次 出发站 到达站 出发时间 到达时间 历时 商务座 一等座 二等座 高级软卧 软卧 动卧 硬卧 硬座 无座 备注
"""
table = PrettyTable()
"""
prettytable库:
快捷创建表格并打印输出;
安装:pip install prettytable
导入:from prettytable import PrettyTable
创建:x = PrettyTable()
Github 地址:https://github.com/dprince/python-prettytable
"""
table.add_column("车次", train_code)
table.add_column("出发站", start_station_key)
table.add_column("到达站", to_station_key)
table.add_column("出发时间", start_time)
table.add_column("到达时间", to_time)
table.add_column("历时", cost_time)
table.add_column("商务座", business_seat)
table.add_column("一等座", first_seat)
table.add_column("二等座", second_seat)
table.add_column("高级软卧", senior_soft)
table.add_column("软卧", soft_first)
table.add_column("动卧", moving_sleep)
table.add_column("硬卧", hard_second)
table.add_column("硬座", hard_seat)
table.add_column("无座", no_seat)
table.add_column("备注", tips)
print(table)
写到这里吧,GUI部分就不上传了。