Python爬取热门城市火车票信息
使用程序获取火车票信息,解放双手,减少负担,快速抢票,出行更轻松(-v-)
首先打开12306火车票查询页面 http://www.12306.com/#/train/index
接下来随便搜索两个城市的车票,这里搜索了北京到上海的车票。
点击搜索后,获取如下数据包:
从最后一个数据包中,我们可以看到12306返回的火车票JSON数据(这正是我们所需要的),部分如下:
毫无疑问,这个数据包就是接下来研究的重点了。
查看此数据包的请求数据如下:
分析Request URL不难发现,出发城市的参数为depStationCode,目的城市的参数为arrStationCode,日期参数为deptDate。但URL中参数和我们输入的参数不同在于:北京,上海分别变成了BJP以及SHH。
城市参数显然是城市的拼音首字母加上另一个字母组成,但城市参数的最后一个字母的规律就不清楚了。所以经过多次查询,得到热门城市对应的参数如下:
{'北京':'BJP','上海':'SHH','广州':'GZQ','深圳':'SZQ','成都':'CDW','杭州':'HZH','武汉':'WHN','西安':'XAY','重庆':'CQW','青岛':'QDK','长沙':'CSQ','南京':'NJH'}
分析Qequest Method得到请求方法为GET。
OK,请求过程分析完毕,查询代码如下:
if __name__ == '__main__':city_dic = {'北京':'BJP','上海':'SHH','广州':'GZQ','深圳':'SZQ','成都':'CDW','杭州':'HZH','武汉':'WHN','西安':'XAY','重庆':'CQW','青岛':'QDK','长沙':'CSQ','南京':'NJH'}city_name_dep = input('输入出发城市:')city_name_arr = input('输入目的城市:')date = input('输入日期(eg:2018-08-28):')url='http://api.12306.com/v1/train/trainInfos?arrStationCode='+city_dic[city_name_arr]+'&deptDate='+date+'&deptStationCode='+city_dic[city_name_dep]+'&findGD=false'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}r = requests.get(url=url,headers=headers)
print(r.text)
查询后可以得到包含车票信息的JSON数据:
当然,JSON数据不可能是我们需要的最终数据,接下来我们要解析这个JSON数据。
解析JSON的方法很多,这里用了python自带的json模块(代码如下):
data = json.loads(r.text)for item in data['data']['trainInfos']:print('车辆编号:'+item['trainCode']+' '+'出发时间:'+item['deptTime']+' '+'到达时间:'+item['arrTime']+' '+'总时间:'+item['runTime']) for s in item['seatList']:print(s['seatName']+' '+'数目:'+s['seatNum']+' '+'价格:'+s['seatPrice'])
这样,一个实现最基本车票查询功能的程序就完成了。
完整代码如下:
import jsonif __name__ == '__main__':city_dic = {'北京':'BJP','上海':'SHH','广州':'GZQ','深圳':'SZQ','成都':'CDW','杭州':'HZH','武汉':'WHN','西安':'XAY','重庆':'CQW','青岛':'QDK','长沙':'CSQ','南京':'NJH'}city_name_dep = input('输入出发城市:')city_name_arr = input('输入目的城市:')date = input('输入日期(eg:2018-08-28):')url = 'http://api.12306.com/v1/train/trainInfos?arrStationCode='+city_dic[city_name_arr]+'&deptDate='+date+'&deptStationCode='+city_dic[city_name_dep]+'&findGD=false'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}r = requests.get(url=url,headers=headers)#print(r.text)data = json.loads(r.text)for item in data['data']['trainInfos']:print('车辆编号:'+item['trainCode']+' '+'出发时间:'+item['deptTime']+' '+'到达时间:'+item['arrTime']+' '+'总时间:'+item['runTime']) for s in item['seatList']:print(s['seatName']+' '+'数目:'+s['seatNum']+' '+'价格:'+s['seatPrice'])
更多个人原创博客,可前往我的个人网站哦!
传送门:暮雨ss
Python爬取热门城市火车票信息相关推荐
- Python 爬取拉勾招聘信息
Python 爬取拉勾招聘信息 故事背景 最近有个好哥们啊浪迫于家里工资太低,准备从北方老家那边来深圳这边找工作,啊浪是学平面设计的知道我在深圳这边于是向我打听深圳这边平面设计薪资水平,当时我有点懵逼 ...
- python关于二手房的课程论文_基于python爬取链家二手房信息代码示例
基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...
- python爬取某城市各监测站点历史空气质量数据
python爬取某城市各监测站点历史空气质量数据 引言 正文 一.安装Web driver 二.安装selenium 三.数据爬取 引言 由于要使用某地各监测站点的空气质量数据做数据预测,因此需要去网 ...
- Python爬取安居客经纪人信息
Python爬取安居客经纪人信息 Python2.7.15 今天我们来爬取安居客经纪人的信息.这次我们不再使用正则,我们使用beautifulsoup.不了解的可以先看一下这个文档,便于理解.http ...
- Python爬取药监局化妆品管理信息发现的问题
Python爬取药监局化妆品管理信息 **1.json格式本质上是字符串!!! 今天在爬取国家药监局化妆品管理信息的时候,发现"json数据本质上是字符串",以前我还以为json本 ...
- 运用Python爬取二手房价格与信息的两种常用方法
最近房地产市场进一步收紧,多地地方政府出台各种收紧政策,以保证房地产健康发展,因此云朵君就想到运用Python网络爬虫,抓取部分房产信息,了解下最近房地产的情况. 接下来以房天下二手房信息,以获取某个 ...
- Python爬取携程酒店信息
文章目录 前言 一.请求头,请求参数 二.获取JSON数据 总结 前言 还是毕设- 要用到哈尔滨黑河酒店的数据 但每个城市都一样 还是从携程下手- 一.请求头,请求参数 在携程主页搜索我们要爬取的城市 ...
- python爬取b站用户_用Python爬取bilibili全站用户信息
教你用Python爬取哔哩哔哩全站用户信息 运行 下载 git clone https://github.com/cexll/bili_user_Spider.git 复制代码 运行环境 Window ...
- Python爬取安居客新房信息
由于是刚开始学习Python爬虫,做个简单的爬虫,提供一个学习思路. 由于水平有限,正则表达式写的实在是抠脚,就直接上BeautifulSoup了. BeautifulSoup的学习参考http:// ...
最新文章
- html中两行三列怎样写,html – Flexbox 3 divs,两列,一列有两行
- 十八、redis.conf配置详解
- qconshanghai2014
- android动态jar,Android动态加载Jar(包含第三方依赖Jar)
- KeyMob:我们做的不仅是移动广告聚合 更是靠谱
- Centos6.10源码部署zabbix-3.2.6
- 不可思议黑科技,Xamarin移动开发新时代
- 3: Java虚拟机体系结构
- iOS 审核之 Performance - 2.5.2 被拒 dlopen(), dlsym(), respondsToSelector:, performSelector
- 使用jQuery插件filtrify实现的超酷动态标签分类摩托车新款展示
- html语言 图片大小,html如何设置图片大小
- 关于IE浏览器的一些思路
- c语言十六进制字母,c语言读取十六进制文件
- 算法分析——算法的渐进效率分析 和 渐进符号大O、大Ω、大θ、小o、小ω
- 常见机器学习算法适合使用的业务场景汇总(1)
- 超低功耗MCU的选择方法
- openGL控制FPS (每秒传输的帧数)
- 编程训练题:多项式求和
- 【渝粤教育】广东开放大学财务会计2 形成性考核 (34)
- JAVA中REPLACE和REPLACEALL的区别(转)
热门文章
- Windows 10计算机性能优化:让你的电脑更流畅
- 学计算机有名学校有哪些,计算机学校哪所有名?
- (2016)最新最好的Unity3D Github项目收集
- 滴滴客服解决方案平台建设实践
- Eclipse安装SVN插件和项目迁入迁出SVN
- 360无线wifi路由器连接到服务器,360PI无线路由器怎么联接无线+有线?
- pythonROS topic掉包问题
- 如何用三个月时间获得三年经验
- Abp.vnext 使用VS2022+Docker 部署至阿里云
- XMLHttpRequest cannot load http://xxxxxx. No 'Access-Control-Allow-Origin' header i