import requests # 导入表格输出 import prettytable as pt # 导入json import json import pymysql from config import mysql_local class chepiao_info: def __init__(self): self.conn = pymysql.connect(**mysql_local) self.cursor = self.conn.cursor() def save_data(self, num, start_time, end_time, use_time, topGrade, first_class, second_class, soft_sleeper, hard_sleeper, hard_seat, no_seat): data = (num, start_time, end_time, use_time, topGrade, first_class, second_class, soft_sleeper, hard_sleeper, hard_seat, no_seat) sql = "INSERT INTO chepiao_info (num, start_time, end_time, use_time, topGrade, first_class, second_class, soft_sleeper, hard_sleeper, hard_seat, no_seat) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" self.cursor.execute(sql, data) self.conn.commit() def Ticket(start_city, end_city, date): # # 查票 输入 出发城市 / 目的城市 / 出发时间 # start_city = input('输入出发城市:') # 输入函数使用方法 # end_city = input('输入目的城市:') # date = input('输入出发时间<2022-08-06>:') # 读取城市json文件 f = open('city.json', encoding='utf-8') # 文件读取 # f.read() 字符串 city_json = json.loads(f.read()) # 数据容器转换 # 出发城市 from_station = city_json[start_city] # 字典取值 # 目的城市 to_station = city_json[end_city] # 字典取值 # 确定请求url url = f'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={date}&leftTicketDTO.from_station={from_station}&leftTicketDTO.to_station={to_station}&purpose_codes=ADULT' # 模拟浏览器 headers = { 'Cookie': '_uab_collina=165650330916153394558455; JSESSIONID=4E8C54B97C3C4A2836EFB3A6529F2FA7; _jc_save_wfdc_flag=dc; _jc_save_fromStation=%u7941%u9633%2CQWQ; _jc_save_toStation=%u957F%u6C99%2CCSQ; BIGipServerotn=535822858.24610.0000; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; BIGipServerpool_passport=98828810.50215.0000; RAIL_EXPIRATION=1666352913084; RAIL_DEVICEID=UUAN3j96v_gsz37OlhGUDBYABtIVZXLmp5TFSAEwzFBx_tqx8r9Ar-jZUTup-K6STKZxdcyuK-7PqGLIOkQCxWsN8B6yF8HYHi0vxUkHWP8pbJgCCEnFwbbJ6tEYIVFOEZEQTBtCXtronC-e8nuewGsPhY725hV_; route=6f50b51faa11b987e576cdb301e545c4; _jc_save_fromDate=2022-10-20; _jc_save_toDate=2022-10-18', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36', } # 发送请求 表示对于url地址发送请求,请求成功 response = requests.get(url=url, headers=headers) # 2. 获取数据, 获取服务器返回响应数据 ---> 开发者工具里面response print(response.json()) # 序号 lis = [] page = 0 c = chepiao_info() # 3. 解析数据, 获取 response.json() json字典数据, 字典取值, 键值对取值, 根据冒号左边, 提取冒号右边 for index in response.json()['data']['result']: # split() 字符串分割方法 --> 返回是列表 content_list = index.split('|') # 根据列表索引位置提取内容 num = content_list[3] # 车次 start_time = content_list[8] # 出发时间 end_time = content_list[9] # 到达时间 use_time = content_list[10] # 耗时 topGrade = content_list[25] # 特等座 if topGrade: pass else: topGrade = content_list[32] first_class = content_list[31] # 一等 second_class = content_list[30] # 二等 hard_sleeper = content_list[28] # 硬卧 hard_seat = content_list[29] # 硬座 no_seat = content_list[26] # 无座 soft_sleeper = content_list[23] # 软卧 dit = { 'SerialNo': page, 'TravelNumber': num, 'DepartureTime': start_time, 'ArrivalTime': end_time, 'TimeTime': use_time, 'PremiumSeat': topGrade, 'FirstClassSeat': first_class, 'SecondClassSeat': second_class, 'SoftSleeper': soft_sleeper, 'HardSleeper': hard_sleeper, 'HardSeat': hard_seat, 'Noseat': no_seat, } lis.append(dit) page += 1 c.save_data(num, start_time, end_time, use_time, topGrade, first_class, second_class, soft_sleeper, hard_sleeper, hard_seat, no_seat) return lis