解析车站信息以及车辆信息

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

1. 解析城市/车站编码

城市/车站编码js文件有版本号

# 12306.funk12306.get_stations_dict
import re
import json
import requests# 获取车站编号字符串 station_version=1.9076
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9076'
resp = requests.get(url)
stations_str = re.search("'(.*)'", resp.text).group(1)# 获取{城市(车站):编码, ...} 键值对
stations_dict = {}
for station in stations_str.split('@'):if station == '': # 按@切会切出空字符串continuestations_dict[station.split('|')[1]] = station.split('|')[2]with open('./utils/stations_dict.py', 'w', encoding='utf8') as f:f.write('stations_dict = ')json.dump(stations_dict, f, ensure_ascii=False, indent=4)

2. 获取车辆信息

# 12306.funk12306.Funk12306.buy_ticketdef buy_ticket(self):self.s.headers.pop('Referer') # 清除referer# 获取城市(车站)编码from_station = input('输入出发城市或车站:')to_station = input('输入到达城市或车站:')train_date = input('输入出行日期,格式为2018-12-03:')from_station_code = stations_dict.get(from_station, '')to_station_code = stations_dict.get(to_station, '')# 查询车量信息日志geturl = 'https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT' % (train_date, from_station_code, to_station_code)resp = self.s.get(url)print(resp.text)# 查询车量具体信息queryurl = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT' % (train_date, from_station_code, to_station_code)response = self.s.get(url)# 打印trains_listprint(json.loads(response.content)['data']['result'])

3. 解析车辆信息

# 12306.utils.parse_trains_infosimport urllib.parsedef parseTrainsInfos(trains_list):"""解析列车信息列表, 返回列车信息列表"""trains_infos_list = []if trains_list == []:return []for train_info in trains_list:train_info_list = train_info.split('|')train_info_dict = {}# 构造列车信息train_info_dict['secretStr'] = urllib.parse.unquote(train_info_list[0])  # secretStr ;为''时无法购买车票# train_info_list[1]  预定/列车停运train_info_dict['train_no'] = urllib.parse.unquote(train_info_list[2])  # train_notrain_info_dict['stationTrainCode'] = urllib.parse.unquote(train_info_list[3])  # stationTrainCode 即车次 # 展示train_info_dict['start_station'] = urllib.parse.unquote(train_info_list[4])  # 始发站 # 展示train_info_dict['end_station'] = urllib.parse.unquote(train_info_list[5])  # 终点站 # 展示train_info_dict['from_station'] = urllib.parse.unquote(train_info_list[6])  # 出发站 # 展示train_info_dict['to_station'] = urllib.parse.unquote(train_info_list[7])  # 到达站 # 展示train_info_dict['from_time'] = urllib.parse.unquote(train_info_list[8])  # 出发时间 # 展示train_info_dict['to_time'] = urllib.parse.unquote(train_info_list[9])  # 到达时间 # 展示train_info_dict['use_time'] = urllib.parse.unquote(train_info_list[10])  # 时长 # 展示train_info_dict['buy_able'] = urllib.parse.unquote(train_info_list[11])  # 能否购买 Y 可以购买 N 不可以购买 IS_TIME_NOT_BUY 停运 # 展示train_info_dict['leftTicket'] = urllib.parse.unquote(train_info_list[12])  # leftTickettrain_info_dict['start_time'] = urllib.parse.unquote(train_info_list[13])  # 车次始发日期 # 展示train_info_dict['train_location'] = urllib.parse.unquote(train_info_list[15])  # train_location 不知道是啥??train_info_dict['from_station_no'] = urllib.parse.unquote(train_info_list[16])  # 出发站编号train_info_dict['to_station_no'] = urllib.parse.unquote(train_info_list[17])  # 到达站编号# 14,18,19,20,27,34,35未知train_info_dict['gaojiruanwo'] = urllib.parse.unquote(train_info_list[21])  # 高级软卧 # 展示train_info_dict['qita'] = urllib.parse.unquote(train_info_list[22])  # 其他 # 展示train_info_dict['ruanwo'] = urllib.parse.unquote(train_info_list[23])  # 软卧 # 展示train_info_dict['ruanzuo'] = urllib.parse.unquote(train_info_list[24])  # 软座 # 展示train_info_dict['tedengzuo'] = urllib.parse.unquote(train_info_list[25])  # 特等座 # 展示train_info_dict['wuzuo'] = urllib.parse.unquote(train_info_list[26])  # 无座 # 展示train_info_dict['yingwo'] = urllib.parse.unquote(train_info_list[28])  # 硬卧 # 展示train_info_dict['yingzuo'] = urllib.parse.unquote(train_info_list[29])  # 硬座 # 展示train_info_dict['erdengzuo'] = urllib.parse.unquote(train_info_list[30])  # 二等座 # 展示train_info_dict['yidengzuo'] = urllib.parse.unquote(train_info_list[31])  # 一等座 # 展示train_info_dict['shangwuzuo'] = urllib.parse.unquote(train_info_list[32])  # 商务座 # 展示train_info_dict['dongwo'] = urllib.parse.unquote(train_info_list[33])  # 动卧 # 展示trains_infos_list.append(train_info_dict)return trains_infos_list

4. 获取后续请求所需的参数

# 12306.funk12306.Funk12306.buy_ticket  # 解析获取trains_listtrains_list = parseTrainsInfos(json.loads(response.content)['data']['result'])print('查询的列车信息如下:')pprint(trains_list)# 获取选择的列车train_info_dict = trains_list[int(input('请输入选中车次的下标:'))]print('选中了列车信息为:')pprint(train_info_dict)# 列车信息secretStr = train_info_dict['secretStr']leftTicket = train_info_dict['leftTicket']train_location = train_info_dict['train_location']

小结

  1. 了解 解析车站信息
  2. 了解 解析车辆信息

【12306购票】解析车站信息以及车辆信息相关推荐

  1. 基于Java+控制台实现车辆信息管理系统

    基于Java+控制台实现车辆信息管理系统 一.系统介绍 二.功能展示 1.主要功能 2.查看所有车辆信息 3.车辆信息添加 4.车辆信息查询 5.车辆信息删除 三.系统实现 1.car.java 四. ...

  2. 泛微车辆租赁管理方案,车辆信息精细化管理,合同、费用实时掌握

    目前,汽车租赁市场处于稳步增长阶段中.随着数字经济的发展,汽车租赁企业积极利用数字化方式,创新经营模式.提升服务质量. 传统汽车租赁企业主要有长租.短租.临租等业务,为企业.个人提供多元化的汽车租赁服 ...

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

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

  4. 【12306购票】预定订单初始化、解析用户信息以及坐席信息

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

  5. 12306购票信息爬虫

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

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

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

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

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

  8. 【爬虫入门】【正则表达式】【同步】爬取人人车车辆信息1.0

    # 爬取人人车车车辆信息.from urllib.request import urlopen from urllib.error import HTTPErrorimport re, sqlite3 ...

  9. 基于python的车辆轨迹研究_基于车牌信息的车辆出行信息分析系统设计——以桂林市为例...

    1. 设计背景与目的 交通调查的主要内容包括出行起讫点调查(OD调查).交通量与交通设施调查.道路通行能力调查等,而进行交通调查需要耗费大量的人力物力,调查过程中各种不确定因素将直接影响调查结果的可信 ...

最新文章

  1. 数据库使用--MySQL: InnoDB 还是 MyISAM?
  2. VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析
  3. Bom技术类型的讲解
  4. php公告滚动源码,10行js代码实现上下滚动公告效果方法
  5. .NET Framework 1.1安装出现1935错误的解决办法
  6. js删除数组中的某个对象
  7. 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(上)
  8. java socket 回调函数_请问Java网络编程如何在不使用多线程的情况下实现异步返回?...
  9. 无用小知识-递归的使用
  10. Java学习路线图,全套Java基础视频教程
  11. 怎样启动python_python怎样运行
  12. 第五届全国大学生GIS应用技能大赛开发题答案(非官方)
  13. 斐讯路由器怎么设置虚拟服务器,斐讯无线路由器设置教程图解
  14. macbookair有没有touchbar_没有Touch Bar 全新13英寸MacBook Pro初体验
  15. win10系统怎么把python卸载干净_Win10系统卸载python软件失败提示0x
  16. 智能驾仓上蓝牙应用案例
  17. 【Java接口】限制App登录次数
  18. jdbc连接teradata仓库_teradata的jdbc连接,
  19. Oracle VM VirtualBox设置共享文件夹
  20. 【csv乱码】csv文件打开乱码的情况

热门文章

  1. PyQt(Python+Qt)学习随笔:QListWidget插入项的insertItem方法
  2. SpringBoot版开源的CMS系统
  3. 低功耗验证 (一) CMOS基础,功耗分类,低功耗方法
  4. 实测华为锐龙本(adm yes)安装Android avd虚拟机教程
  5. Arbitrum 的 Nitro 项目 Rollup 细节深入
  6. 【探花交友】学习MongoDB快速入门上手
  7. 匆忙推出的Mobileme没有得到广泛的认可,用户认为它速度缓慢、价格昂贵还总是出错
  8. 中国采取反制措施,日本已有应对,美国的芯片规则面临挑战
  9. Picasa的备份目录
  10. 常用的统计量及其对应的抽样分布(python)