Python3 requests 12306查票模块
程序员文章站
2024-03-17 22:47:58
...
记之前的学习,再过一阵子估计忘了。。。
查票不需要登录,但是支付是需要登录的,所以人为操作的话,一般是选择查票->预定->下单(下单时需要登录,出现变态二维码验证)。而我们使用爬虫可以先登录,然后一直保持登录状态,流程:登录->查票->下单(登录时完成了验证)
登录模块并保持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中数据
上一篇: 设计模式(Java)—Adapter模式
下一篇: 关于抢火车票的那些事儿(二)
推荐阅读
-
python3 requests 12306城市中文转英文编码
-
python3 requests 12306下单环节
-
Python3 requests 12306查票模块
-
python3使用requests模块爬取页面内容的实战演练
-
python3使用requests模块爬取页面内容的实战演练
-
Python3使用requests模块实现显示下载进度的方法详解
-
Python3使用requests模块实现显示下载进度的方法详解
-
python3 requests模块用法实例
-
python3如何利用requests模块实现爬取页面内容的实例详解
-
python3如何利用requests模块实现爬取页面内容的实例详解