zoukankan      html  css  js  c++  java
  • 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中数据

  • 相关阅读:
    训练总结
    图论--最短路--SPFA模板(能过题,真没错的模板)
    图论--最短路-- Dijkstra模板(目前见到的最好用的)
    The 2019 Asia Nanchang First Round Online Programming Contest B Fire-Fighting Hero(阅读理解)
    关于RMQ问题的四种解法
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 K题 center
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 D Carneginon
    ZOJ 3607 Lazier Salesgirl (枚举)
    ZOJ 3605 Find the Marble(dp)
  • 原文地址:https://www.cnblogs.com/hecxx/p/11959861.html
Copyright © 2011-2022 走看看