Python3 requests 12306查票模块

记之前的学习,再过一阵子估计忘了。。。

查票不需要登录,但是支付是需要登录的,所以人为操作的话,一般是选择查票->预定->下单(下单时需要登录,出现变态二维码验证)。而我们使用爬虫可以先登录,然后一直保持登录状态,流程:登录->查票->下单(登录时完成了验证)

登录模块并保持session可见之前篇章


查询url:

https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2018-04-30&leftTicketDTO.from_station=CSQ&leftTicketDTO.to_station=ICW&purpose_codes=ADULT

查询出来的结果:



train_date  是要出发的时间

from_station  是出发站

to_station  是目的站

可以看到返回的json文件中result一栏便是我们查询出来的车的具体信息。拿出一条来分析具体内容。可以看到一条信息中间是以  |  来分割的,采用split("|")来提取出每一个信息。

['null', '列车停运', '630000Z12208', 'Z122', 'GZQ', 'CDW', 'CSQ', 'CDW', '24:00', '24:00', '99:59', 'IS_TIME_NOT_BUY', '', '20180429', '', 'Q9', '03', '15', '0', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '0']
['1IdL6OeSyjOsOxbdQuCa3Y8Gti%2FjliuJMJn8UWrqwZwnIOMqS08nauFx%2ByU8LgVf4xNaL%2BcNGS5W%0AySiukRDo%2BwOEpY0V6goMwrPzIjdTBP9CMK%2B6u2%2FnpGJ05CZYCE%2Fr%2BM2GOcTq6GVB2FTUBqQQNlI1%0An5nNJoM9z8XuASHBc32jb6fl3s4gxpCd0tL%2FRZTokNaIqoJuadouxzjE4lHEnMSqXCVCkPowNZhz%0AcOgUGV8QQQXLTQ8jTxJMWV%2FaU3uf', '预订', '6c000G216100', 'G2161', 'CWQ', 'ICW', 'CWQ', 'ICW', '07:58', '15:33', '07:35', 'Y', 'GsHIxKM%2Bse4dDKZNZ7o5Z4ciD9MP%2FFq6S14BeZxZV5TdUEqt', '20180430', '3', 'Q6', '01', '14', '1', '0', '', '', '', '', '', '无', '', '', '', '', '无', '18', '', '', 'O0M0P0', 'OMP', '0']
['g%2B6OX1EV4wfeXF8uLTWRD2UqsJCAzOML7YTmfTJJCAjXyuIlC930YDgjoGmDK8rRpvHdpM%2B5ekOu%0ALDeStR%2Bexq1r1PDWcxtXFC8UdippOZkjgduwpGdbqnGo1LYH8XgUGnNOSN9erAeZ6VKtXmZ8RYF0%0AzWUoEA%2Fk8zA%2FWNnWiqNVgBxWCGCcu%2BwC9AcE9i%2BdxHO9Eq%2FrHHLLXnYC98Bj5r%2BthuOzJXModHyl%0AVsZnlTIUsVxOLAml6ENzV7SZ5hbDslXSw0dYjbk%3D', '预订', '620000K5770M', 'K577', 'CSQ', 'ICW', 'CSQ', 'ICW', '14:00', '11:11', '21:11', 'Y', 'IRkHrYkIRZCqzgnyk8UX9YXI8MgVFQlyedHVqiZ00kO2rLXDiEJc1V2IWFE%3D', '20180430', '3', 'Q7', '01', '18', '0', '0', '', '', '', '无', '', '', '有', '', '无', '有', '', '', '', '', '10401030', '1413', '0']
['UavbzYfc3JEy%2FWiDCC7CFnez%2B0yB2%2FO95Sf9k5jyNr%2BHt1uVVpLQW%2FK4sblNLmhhoksWv4cbvw6P%0AXtUuJ8Zjax8sXizym4728qMqqxxVakGQ5%2BEjlIcLzVLQsRUiPEmE58lY5i8BxuXjtS8nRlCZSYxp%0AXuE5QkZoOY%2FJyGxKGTrHTlMlQFyYk%2B6T%2BTzMkODayHjLQZLDbaAahuGyBTwafk%2BddKqNccE%2FxEZi%0Aobibuu8DSDl0zhwiFR5erCpjcJART8kYzqnN0Y8%3D', '预订', '620000K5020B', 'K502', 'CSQ', 'ICW', 'CSQ', 'ICW', '17:02', '10:53', '17:51', 'Y', 'f0KvuTspxeAi4o6zM1EJoNScVo%2FFCToAmnUbqYBlf7lx3hm5Bl3tCYXpQ4I%3D', '20180430', '3', 'Q6', '01', '09', '0', '0', '', '', '', '无', '', '', '有', '', '无', '有', '', '', '', '', '10401030', '1413', '0']
['syzb%2BAJKph9Irw3WWHnyjqTkvARHk6cTlBzJ9zlln2%2BmY2juPvG8MCufJG45ZZgjvKJYDt3vpw5q%0ARmcuQfzDzlVwVvLzb3dgnUKTfhTg8gnuZQ8EOctkxfoDvjZyatZCHgqfYTp1DM%2FrzIRWID9I8O8H%0AU45T0oV8yI115yXqU7WQy7k0oO6Fj%2Fai6UtLfqxkQUJ7o7CYF9mjSDvDhAKwUG07NP%2B9ediKl1TD%0AFz3uWw4mL%2FoACiY78j94dFdBtYmQ7Tf3yV4aoHc%3D', '预订', '570000K7870O', 'K786', 'NCG', 'ICW', 'CSQ', 'ICW', '18:18', '13:27', '19:09', 'Y', 'iVuA2UPGmD02FGVf4e6rchJUifhgeOSd9i3F8jXZEp%2BCsOA0afut1Tlnx8o%3D', '20180430', '3', 'G1', '11', '19', '0', '0', '', '', '', '无', '', '', '有', '', '无', '无', '', '', '', '', '10401030', '1413', '0']

对照上面查询出来的列车信息图可以简单地分析出来一些信息。

info={
            "预定号": lst[0],  # 预定号
            "train_no": lst[2],
            "车次": lst[3],  # 车次
            "始发站": lst[4],  # 始发站
            "终点站": lst[5],  # 终点站
            "起始站": lst[6],  # 起始站
            "目标站": lst[7],  # 目标站
            "出发时间": "{} {}".format(date, lst[8]),  # 出发时间
            "到达时间": (date,lst[9]),  # 到达时间
            "历时": lst[10],  # 历时
            "train_location": lst[15],
            "高级动卧": lst[21],  # 高级动卧
            "软卧": lst[23],  # 软卧
            "软座": lst[24],  # 软座
            "特等座": lst[25],  # 特等座
            "无座": lst[26],  # 无座
            "硬卧": lst[28],  # 硬卧
            "硬座": lst[29],  # 硬座
            "二等座": lst[30],  # 二等座
            "一等座": lst[31],  # 一等座
            "商务座": lst[32],  # 商务座
            "动卧": lst[33],  # 动卧
        }
对应的城市编码可以在 https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9051查看。比如长沙->CSQ,具体分析下一篇介绍。



至此,查票阶段差不多完成,可以根据上述的相关内容提取相应的字段,在下单时候post表单数据用到。

查票环节代码流程: post 查票url  ->  分析response中数据

猜你喜欢

转载自blog.csdn.net/nonoroya_zoro/article/details/80107014