预定订单初始化、解析用户信息以及坐席信息

  • 1. 预定订单初始化
  • 2. 获取用户信息
  • 3. 解析用户信息
  • 4. 获取乘客信息列表
  • 5. 解析坐席类型
  • 6. 构造乘客信息

学习目标

  1. 了解 预定订单初始化
  2. 了解 解析构造用户信息
  3. 了解 解析构造坐席信息

1. 预定订单初始化

# 12306.funk12306.Funk12306.buy_ticket# 检查用户是否保持登录成功url = 'https://kyfw.12306.cn/otn/login/checkUser'data = {'_json_att': ''}resp = self.s.post(url, data=data)print(json.loads(resp.text))# 点击预定url = 'https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest'data = {'secretStr': secretStr,'train_date': train_date,'back_train_date': train_date,'tour_flag': 'dc',  # dc 单程 wf 往返'purpose_codes': 'ADULT',  # 成人'query_from_station_name': from_station,'query_to_station_name': to_station,'undefined': ''}resp = self.s.post(url, data=data)print(resp.text)# 订单初始化 获取REPEAT_SUBMIT_TOKEN key_check_isChangeurl = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'data = {'_json_att': ''}response = self.s.post(url, data=data)repeat_submit_token = re.search(r"var globalRepeatSubmitToken = '([a-z0-9]+)';",response.content.decode()).group(1)key_check_isChange = re.search("'key_check_isChange':'([A-Z0-9]+)'", response.content.decode()).group(1)

2. 获取用户信息

# 12306.funk12306.Funk12306.buy_ticket# 获取用户信息# 需要 REPEAT_SUBMIT_TOKENurl = 'https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs'data = {'_json_att': '','REPEAT_SUBMIT_TOKEN': repeat_submit_token}response = self.s.post(url, data=data)

3. 解析用户信息

# 12306.utils.parse_passengerdef parsePassenger(passenger_dict):passengers_infos_list = passenger_dict['data']['normal_passengers']passenger_list = []for passenger_info in passengers_infos_list:passenger_info_dict = {}passenger_info_dict['passenger_name'] = passenger_info.get('passenger_name', '')passenger_info_dict['passenger_gender'] = passenger_info.get('sex_name', '')passenger_info_dict['passenger_id_type_code'] = passenger_info.get('passenger_id_type_code', '')passenger_info_dict['passenger_id_no'] = passenger_info.get('passenger_id_no', '')passenger_info_dict['passenger_mobile_no'] = passenger_info.get('mobile_no', '')passenger_list.append(passenger_info_dict)return passenger_list

4. 获取乘客信息列表

# 12306.funk12306.Funk12306.buy_ticket# 解析并构造乘客信息列表passenger_list = parsePassenger(json.loads(response.content))print('获取乘客信息有:')pprint(passenger_list)passenger_info_dict = passenger_list[int(input('输入要购票的乘车人的下标'))]

5. 解析坐席类型

经过不断的抓包,尝试获取坐席类型的编码

# 12306.utils.parse_seat_typeseat_type_dict = {"erdengzuo": "O",  # 二等座"yingwo": "3",  # 硬卧"yingzuo": "1",  # 硬座"wuzuo": "1",  # 无座"ruanwo": "4",  # 软卧"ruanzuo": "2",  # 软座"dongwo": "F",  # 动卧"yidengzuo": "M",  # 一等座"gaojiruanwo": "6",  # 高级软座"shangwuzuo": "9",  # 商务座"tedengzuo": "P",  # 特等座
}

6. 构造乘客信息

# 12306.funk12306.Funk12306.buy_ticket# 坐席类型try:seat_type = seat_type_dict[input('请输入要购买的坐席类型的拼音,如果输入错误,将强行购买无座,能回家就行了,还要tm什么自行车!:')]except:seat_type = seat_type_dict['wuzuo']# 构造乘客信息passengerTicketStr = '%s,0,1,%s,%s,%s,%s,N' % (seat_type, passenger_info_dict['passenger_name'],passenger_info_dict['passenger_id_type_code'],passenger_info_dict['passenger_id_no'],passenger_info_dict['passenger_mobile_no'])oldPassengerStr = '%s,%s,%s,1_' % (passenger_info_dict['passenger_name'],passenger_info_dict['passenger_id_type_code'],passenger_info_dict['passenger_id_no'])# 检查选票人信息url = 'https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo'data = {'cancel_flag': '2',  # 未知'bed_level_order_num': '000000000000000000000000000000',  # 未知'passengerTicketStr': passengerTicketStr.encode('utf-8'),  # O,0,1,靳文强,1,142303199512240614,18335456020,N'oldPassengerStr': oldPassengerStr.encode('utf-8'),  # 靳文强,1,142303199512240614,1_'tour_flag': 'dc',  # 单程'randCode': '','whatsSelect': '1','_json_att': '','REPEAT_SUBMIT_TOKEN': repeat_submit_token}resp = self.s.post(url, data=data)print(resp.text)

小结

  1. 了解 预定订单初始化
  2. 了解 解析构造用户信息
  3. 了解 解析构造坐席信息

【12306购票】预定订单初始化、解析用户信息以及坐席信息相关推荐

  1. 【爬虫实战】12306购票抓包分析以及任务分解

    12306购票抓包分析以及任务分解 前言 1. 抓包分析 1.1 `https://www.12306.cn/index/` 1.2 `https://kyfw.12306.cn/otn/login/ ...

  2. 【12306购票】解析车站信息以及车辆信息

    解析车站信息以及车辆信息 1. 解析城市/车站编码 2. 获取车辆信息 3. 解析车辆信息 4. 获取后续请求所需的参数 了解 解析车站信息 了解 解析车辆信息 1. 解析城市/车站编码 城市/车站编 ...

  3. 12306购票信息爬虫

    12306购票信息爬虫 本文使用python3实现QQ邮箱爬虫和Email解析,会将设计思路和核心代码分享在此处,欢迎大家多多评论交流,感谢? 一.问题背景 二.预案探索 三.三个方案 1.直接抓包, ...

  4. 解析爬虫12306购票系统流程

    做爬虫也将近有一年的时间,本人不是什么名牌大学毕业,但是对计算机的热爱无人能挡.大学学了Java语言,大四来到帝都实习找了一份Java偏数据的实习工作,工作的过程中第一次接触到了爬虫的工作,并且感觉爬 ...

  5. DOM 案例——(美团外卖下拉框菜单、半透明——信息滑入、模态窗口拖拽效果、放大镜效果、滚动条滑到一定位置的固定导航栏、12306购票网站多级联动、斗鱼TV无规则弹幕特效、百度搜索条动态输入下拉瀑布)

    目录 1.缓动动画--美团外卖下拉框菜单 2.半透明--信息滑入 3.模态窗口拖拽效果 4.放大镜效果 5.滚动条滑到一定位置的固定导航栏 6.12306购票网站多级联动 7.斗鱼TV无规则弹幕特效 ...

  6. No5.由内存存储改为数据库存储和redis存储(主要是授权服务端的用户信息、客户端信息、客户授权信息;资源端是没有存储的,每次解析token拿到用户信息)

    代码地址与接口看总目录:[学习笔记]记录冷冷-pig项目的学习过程,大概包括Authorization Server.springcloud.Mybatis Plus~~~_清晨敲代码的博客-CSDN ...

  7. Python爬虫学习笔记-第十二+十三课(selenium综合练习-12306购票)

    selenium综合练习-实现12306购票 1. 练习初衷 2. selenium实现12306购票 2.1 类基本框架 2.2 网站登录 2.3 车次以及余票查询 2.4 解析车次列表 2.5 确 ...

  8. 12306购票抓包分析以及任务分解

    12306购票抓包分析以及任务分解 学习目标: 了解 12306抓包过程 1.1 抓包分析 使用谷歌浏览器或fiddler等抓包工具完成登陆以及购票操作,进行抓包,根据 具有业务作用 或 被set-c ...

  9. python12306买票_Python-爬虫-12306购票业务实现

    1 importrequests2 from requests importRequest,Session3 importrequests.cookies4 importurllib.parse as ...

最新文章

  1. Marathon 0.15: 更稳定 更多数据 更易用
  2. VMware将世界领先的云访问安全代理合作伙伴纳入移动安全联盟
  3. paddlepaddle安装
  4. linux apr文件解压失败,Linux安装apache服务器遇到的问题
  5. 安装python的第一个曲折
  6. SDNU 1029.巧分整数(斯特林数(改)dp)
  7. SpringBoot编写HelloWorld-new
  8. 关于Latent Dirichlet Allocation及Hierarchical LDA模型的必读文章和相关代码
  9. promise入门的准备工作-(尚硅谷教程笔记)
  10. c++游戏编程 源代码
  11. eclipse各版本对应JDK版本要求
  12. 中国IT排名百强公司 .
  13. oppo计算机锁屏快捷键,电脑如何快速锁屏
  14. 五子棋-单机游戏-微信小游戏项目开发入门
  15. 配置oem 13c以监控管理数据库
  16. 自媒体素材库有哪些?蚁小二带你找素材
  17. 按键精灵手机版 参数个数不匹配
  18. 蓝易云:linux怎么关闭防火墙详细教程
  19. 大雁塔尺寸_仅用一张A4纸和计算器针对西安大雁塔高度的测量
  20. SOAP在java中的应用实例

热门文章

  1. ARM指令英文全称及功能
  2. 80C51汇编指令学习
  3. Android 集成微信支付和支付宝支付工具类
  4. 小孩写字慢又丑,怎么治?来看这里
  5. 鼠标停留触发事件,离开时也触发
  6. 已知顺丰快递既可以发陆运,也可以发空运;EMS只能发空运,圆通只能发陆运。 小明现在发送快递,为其设计两个方法,分别用来发空运和陆运。
  7. 亲身经历——短信诈骗
  8. CarSim教程(一)- 基本操作
  9. 电子沙盘数字沙盘大数据可视化交互地理信息系统开发教程第8课
  10. Sweet Home 3D for Mac(3D室内设计软件)