爬取火车票以及票价

2023-11-09 12:20
文章标签 爬取 票价 火车票

本文主要是介绍爬取火车票以及票价,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求来源:一个文科生妹子,需要火车站的连通数据,写毕业论文。具体需求是,获取给定的313个车站之间的火车耗时最短的车次的最低票价。例如:
武汉到深圳的车次很多,以2018-06-08日为例,历时最短的车次是G77次高铁,最低票价是二等座538,现在的任务就是取出这313个城市两两之间的历时最短的车次的最低票价,普通火车对应的就是硬座,高铁或者动车对应的一般就是二等座。也不排除有其他情况。
这里写图片描述

操作步骤:
1.先打开游览器上面的开发工具,并且访问12306网站,查询武汉到深圳的车次,根据开发工具中的network->headers->request url。拿到访问的url,例如:武汉到深圳的url
https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2018-06-08&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=SZQ&purpose_codes=ADULT
从url上面看到,train_date就是你查询的日期,from_station是武汉火车站的车站代号,这个后面介绍,to_station是到达火车站的车站代号,purpose_codes是成人还是学生啦。
火车站代码可以从下面的那个js文件拿到。
https://kyfw.12306.cn/otn/resources/js/framework/station_name.js
所有车次的数据:
https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0
2. 再次根据开发工具中的network->response中拿到会返回结果,也可以通过上面游览器访问步骤一中的url,查看返回结果。在结果中有几个需要关注的字段,”status”,”data”以及子字段”result”。
子字段”result”中的数据看上去比较复杂,我们主要的数据就在这个里面,把长串本次用不到的数据去掉之后,就是下面这个样子

"null|预订|930000Z23201|Z229|WAR|SZQ|WCN|SZQ|06:22|19:28|13:06|Y|null|20180606|3|R1|15|22|0|0|||||||无||有|有|||||101030|113|0"
"null|预订|4e000G10010B|G1001|WHN|IOQ|WHN|IOQ|07:25|12:12|04:47|Y|null|20180608|3|N2|01|08|1|0|||||||无||||有|有|20||O090M0O0|O9MO|0"

以’|’为分隔符,分解上面的数据,第三个段数据为车次编号,第四个段数据为车次号,第9个段数据为发车时间,后面一次为到达时间和历时时间,第15个段为起始站编号,16个段为到达站编号,第34个段为座位类型,这几个数据都是我们需要的,其他的字段在此不做分析了。对于历时时间,需要关注一种特殊情况,就是列车停运,从12306返回来看,如果某个车次列车停运,历时时间会是99:59。
3.通过上面的两个步骤,可以拿到历时最短的车次了,但是票价还没有得到,接着利用游览器的开发者工具,得到查询票价的接口,示例:信阳到深圳的2018-06-08车次G73票价查询接口
https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=3800000G730B&from_station_no=04&to_station_no=10&seat_types=OM9&train_date=2018-06-08
通过步骤2中的分解,票价的查询url也可以得到。
4.查看票价查询结构的返回数据,如下示例,票价数据前面都有”¥”标记,解析一下”¥”标记即可。

idateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"OT":[],"WZ":"¥609.0","M":"¥955.0","A9":"¥1888.0","9":"18880","O":"¥609.0","train_no":"3800000G730B"},"messages":[],"validateMessages":{}}

再这个过程中,还发现了一个比较好的网站,”http://www.jt2345.com”
可以获取到所有车次的列车时刻表,但是票价数据没有,不过先利用爬虫爬取所有的列车时刻表,然后分析城市的火车连通情况,以及某些城市的中转情况。
[https://github.com/skyflower/python_study/tree/master/train_price ]

====================================================================

这篇关于爬取火车票以及票价的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376053

相关文章

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功能数据来源示例使用目的搜索引擎优化 (SEO)分析关键词密度、外部链接质量等网站元数据、链接提升网站在搜索引擎中的排名市场研究收集竞品信息、价格比较电商网站、行业报告制定更有效的市场策略舆情

python网络爬虫(五)——爬取天气预报

1.注册高德天气key   点击高德天气,然后按照开发者文档完成key注册;作为爬虫练习项目之一。从高德地图json数据接口获取天气,可以获取某省的所有城市天气,高德地图的这个接口还能获取县城的天气。其天气查询API服务地址为https://restapi.amap.com/v3/weather/weatherInfo?parameters,若要获取某城市的天气推荐 2.安装MongoDB

【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录 目标 准备工作 爬取数据的开始时间和结束时间 爬取数据并解析 将数据转换为DataFrame并保存为CSV文件         本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点: 使用requests库发送HTTP请求使用lxml库解析HTML文档使用dateti

scrapy 设置爬取深度 (七)

通过在settings.py中设置DEPTH_LIMIT的值可以限制爬取深度,这个深度是与start_urls中定义url的相对值。也就是相对url的深度。例如定义url为:http://www.domz.com/game/,DEPTH_LIMIT=1那么限制爬取的只能是此url下一级的网页。深度大于设置值的将被ignore。       如图:

scrapy自动多网页爬取CrawlSpider类(五)

一.目的。 自动多网页爬取,这里引出CrawlSpider类,使用更简单方式实现自动爬取。   二.热身。 1.CrawlSpider (1)概念与作用: 它是Spider的派生类,首先在说下Spider,它是所有爬虫的基类,对于它的设计原则是只爬取start_url列表中的网页,而从爬取的网页中获取link并继续爬取的工作CrawlSpider类更适合。 ࿰

Scrapy ——自动多网页爬取(抓取某人博客所有文章)(四)

首先创建project:   [python]  view plain  copy     转存失败重新上传取消<

python爬取网页接口数据,以yearning为例

模拟登陆获取token,传token到对应的接口获取数据,下载到csv里面  import getpassimport osimport requestsimport timeimport csvfrom datetime import datetimeclass Yearning:def __init__(self):self.session = requests.Session()

爬取需要的图片

爬取图片 import re,requests,time#导入所需要的库headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0","Cookie":"B

爬取知乎回答

登录网站 参考这篇文章 在 Network 中随意点击一个 Fetch 项(注意前面的小图标),在右边的 Headers 中找到 Cookie,这段代码就是知乎 Cookie。 import requests# 引入ssl,取消全局ssl认证:# 设置好urlurl = 'https://www.zhihu.com/'# 设置好headersheaders = {'User-A

火车票、高铁票如何开具电子发票?12306怎么查询报销凭证是否领取?

火车票、高铁票如何开具电子发票? 众所周知,目前很多消费(衣食住行)报销都是可以开具电子发票的,但火车票目前无法开具电子发票。 火车票目前只有纸质报销凭证,报销凭证与之前的车票类似,但是上面写有“仅供报销使用”,并且报销凭证只能打印一次,一旦丢失或损坏无法重新打印。 如何查询报销凭证是否取过? 1、通过12306购票平台查询 以12306APP为例,如果已经在该平台购买了车票并领取了