12306 火车票 Python爬虫 车次信息及经停站信息

爬取12306中全国的列车时刻表和车站信息 爬取12306全国的列车时刻表和车站信息 阅读详情

以下代码为爬取12306官网的信息,有兴趣的也可以爬取 http://www.jt2345.com/ 

import requests
import json

def get_City_data():
    '''
    城市代码对应表获取,生成
    '''
    # 12306官网车站信息版本更新比较快,记得更新 station_version 
    url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9099'
    # 伪造浏览器登陆
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'
        }
    response = requests.request('GET', url, headers=headers)
    html = response.text
    station_data = html.split('=')[1].split('@')
    ret = {}
    # unit :
    # 'zyi|遵义|ZYE|zunyi|zy|2844'
    for unit in station_data:
        if '|' not in unit:
            continue
        ret[unit.split('|')[1]] = unit.split('|')[2]
    return ret

def get_trains_info(date,from_station,to_station):
    '''
    火车信息查询方法函数
    '''
    url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(date,from_station,to_station)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3664.3 Safari/537.36'
        }
    response = requests.request('GET', url, headers=headers)
    html = response.text
    return html

def get_stopover_station(train_no,start_station,end_station,date):
    url = 'https://kyfw.12306.cn/otn/czxx/queryByTrainNo?train_no={}&from_station_telecode={}&to_station_telecode={}&depart_date={}'.format(train_no,start_station,end_station,date)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3664.3 Safari/537.36'
        }
    response = requests.request('GET', url, headers=headers)
    html = response.text
    return html

def main(date,startcity,endcity):
    # 获取全国的火车站的名字及代码对应表
    data = get_City_data()
    # 返回火车票接口查询数据
    info = get_trains_info(date,data[startcity],data[endcity])
    # info:
    #{"data": {flag: "1", "map": {BJP: "北京", SHH: "上海", VNP: "北京南"}, "result": ["fJgAiGfEp8nqr1jaud1N4b17f5xCreizn6xvm1dYBmvnv7XaBUThOzlgUCGDqoQE7FMXDHXbs%2FmF%0AoNEJ5knMgu3FMRS%2BCSeBHg6qwiUjWNjG7c5wloxNt5tniSJWOHzp4gHcLIOpuYlt8nWl2KZ2jpQm%0AmMiRGifL0kDc1HuT7YdnxR9HguLSHmoHSbwlB6mN7vgdvrpawfKTgpqmaGVBQyYHzEmudY3rERDT%0AwkP80Z%2BWT7qy31A5nR2bzaTV1fCbfsigP3LxN6xLwLaz5cbztz9eVoxw%2BrAhe41qJA%3D%3D|预订|550000D70600|D706|SHH|BJP|SHH|BJP|21:18|09:24|12:06|Y|O3UuolZoM0VVKhi%2FsTBmHHJ2J7g9sWHQqUjUpqLijyvSO4lo|20190415|3|H6|01|05|0|0||||1|||||无||无||||O0I0J0|OIJ|1|0|null","HTuDCpXyllRUigLOrcyIG2mSFjI5lvN6sRCZrDm5FEXFO75MR4RghD8ytY5m1JbuPhGFawgi58xv%0AvKyoLRGqlKSL5WuLn%2BCqCb2EArhsW%2FdWpCcMRevIk1LXVChmfgUlCMG6otP%2BpHnr%2BeIirRQz2few%0AaARvKzPbdcIBTeL2ZS33wxFYgFBTRLgJmsXJPebK3Gkww%2FzIs63pKPdzIiqpY31YoahXc5V1jAbf%0Akv6IFoar%2BNqPQgZiqufol6CHji%2BMSAi%2FwBc8gsdZK2E5jKJ4hdCn2%2FNfB%2BhchCt6BFCFOvw%3D|预订|550000D71000|D710|SHH|VNP|SHH|VNP|21:24|09:22|11:58|Y|bE6T6Vz57B64uj%2F6waOgksuwVoVWE3c5zK0at8%2FT79ouH9uj|20190415|3|H6|01|05|1|0||||无|||||2||无||||O0I0J0|OIJ|0|0|null"]},"httpstatus": 200,"messages": "","status": true}
    hjson = json.loads(info)["data"]["result"]
    # raw_train:
    # "|预订|550000Z16420|Z164|SHH|LSO|SHH|LSO|20:08|19:30|47:22|N|SIygZtG7LXRkGXyeINjk7T5kNo40ywRzkHSmSiTp6MyIlkHIGPlTcQfsc9U%3D|20190303|3|H2|01|14|0|0||||无|||无||无|无|||||10401030|1413|0|0|null"
    for raw_train in hjson:
        # 循环遍历每辆列车的信息
        data_list = raw_train.split('|')
        # 车次号码
        train_no = data_list[3]
        # 出发站
        from_station_name = startcity
        # 终点站
        to_station_name = endcity
        # 出发时间
        start_time = data_list[8]
        # 到达时间
        arrive_time = data_list[9]
        # 总耗时
        time_used_up = data_list[10]
        # 一等座
        first_class_seat = data_list[31] or '--'
        # 二等座
        second_class_seat = data_list[30] or '--'
        # 软卧
        soft_sleep = data_list[23] or '--'
        # 硬卧
        hard_sleep = data_list[28] or '--'
        # 硬座
        hard_seat = data_list[29] or '--'
        # 无座
        no_seat = data_list[26] or '--'

        list = ('车次:{} 出发站:{} 目的地:{} 出发时间:{} 到达时间:{} 火车运行时间:{} 座位情况:\n 一等座:「{}」 二等座:「{}」 软卧:「{}」 硬卧:「{}」 硬座:「{}」 无座:「{}」'.format(train_no, from_station_name, to_station_name, start_time, arrive_time, time_used_up, first_class_seat,second_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat))

        print('*'*100)
        print(list)
        print('*'*100)
        print('经停站信息:')
        
        stop = get_stopover_station(data_list[2],data_list[6],data_list[7],date)
        stop_json = json.loads(stop)["data"]["data"]
        
        for i in range(len(stop_json)):
            if i != len(stop_json)-1:
                print('车次:{} 出发站:{} 到达站:{} 出发时间:{} 到达时间:{} '.format(train_no,stop_json[i]['station_name'],stop_json[i+1]['station_name'],stop_json[i]['start_time'],stop_json[i+1]['arrive_time']))


if __name__ == '__main__':
    try:
        date = str(input('请输入日期(格式“2019-01-01”): '))
        startcity = str(input('出发站: '))
        endcity = str(input('到达站:'))
        main(date,startcity,endcity)
    except KeyError:
        print('您输入的数据有问题,请重新输入')

 效果图如下:

 

python3 实现火车票查询 代码+知识点 一. prettytable 1. 简介:可以将输出内容按照表格方式整齐输出。 2. 安装:pip install prettytable 3. 导入:from prettytable import PrettyTable 4. 示例: from prettytable import PrettyTable table = PrettyTable(["id", "name"]) table.add... 阅读详情

相关推荐

神级程序员用Python3抓取12306车次信息!超详细的新手案例教学!

前言 结果展示: 我在window上运行的结果 下面这一段说明我是抄的,哈哈,因为我自己再怎么写还不是同样的内容。 让我们先给这个小应用起个名字吧,既然及查询票务信息,那就tickets,其实 大家随意了,需要发布就需要起一个更好的名字,不然只要自己玩儿的懂,但是要有程序的特点,所以还是tickets相关的吧。方便阅读和自己记忆。 我们希望用户只要输入出发站,到达站以及日期就让就能获得想要的信息,比如要查看10月31号贵阳-遵义西的火车余票, 我们只需输入: python3.5 lnlr.py 贵阳 遵

zihong523的博客 1884

Python爬虫爬取铁路列车时刻表数据

Python爬虫爬取网站列车时刻表数据

Made-In-China-0711的博客 7713

12306火车时刻表查询接口

摘要 本文讲解12306网站接口查询火车时刻表信息 接口中用到的方法在文章最后 一、 根据车次查询内部火车编号 接口:https://search.12306.cn/search/v1/train/search 参数: keyword, date 请求类型: GET /** * 根据车次名称查询列车编号 * @param keyword 车次名 * @param date 发车日期 (格式: yyyyMMdd) */ private List<TrainInfo> searchT

qq_41015611的博客 7932

12306所有车次及时刻表的爬取下

终于来到下啦!!马上就要完结了,先展示一下最终的成品吧! 下面就是我们对上次那个最终版的处理,当然,不要在意我的命名,这个就是处理中篇最后的那个csv,如果我的文件名字对不上大家也不要care了,存了太多副本了,这个total1,2,3是因为平均一个车次会有10个详情站左右,大概一天会有8万多条数据,由于excel有显示上限,所以建议10天处理一次,我这应该是最后第三批剩下的几天,前面的改一下date_list就能用了,最后对这三个total1,2,3的csv分别去重,注意哦,要根据车次和站点名称两列进行

南巷的博客 2713

python 爬取12306网站车次信息

12306网站爬取车次信息 本想着可以做一个类似于查询详细车次信息的小工具,但是不尽人意,12306网站爬取的车次信息加密了,研究了一个下午也没有研究出其中全部的信息解密: 爬取的信息如下(举一个例子): “PCbPusP%2F%2FmzOWewCWL%2Fxp0o0JMnsipqj3%2Flua6c5WsF2DGxvD3T0wcV5xzrjKFFo9ho%2BQuBkzKrr%0A1qXr...

小小先生 3519

Train-Crawler:12306火车时刻表信息爬虫,车次经停站信息爬虫,ADSL反反爬虫机制

1. 基本介绍: config.py:配置信息文件 generate_task2db.py:从12306网站上下载train_list和station_name信息,对数据进行初步处理。生成两类任务:车次时刻表信息抓取任务(train_crawler.py)与车次经停靠站点信息(path_stations_crawler.py)。_id(主键):任务抓取url参数。车次时刻表信息抓取任务,对应起始站代码和终点站代码;车次经停靠站点信息抓取任务,对应车次序号train_no、起始站代码和终点站代码。status: 任务执行状态。以0作为任务抓取的初始状态值,表示UN_PROCESSED,1表示PROCESSING,2表示PROCESSED train_crawler.py: 车次时刻表信息抓取爬虫。 path_stations_crawler.py: 经停靠站台信息抓取爬虫。 get_pa

bilibili面试题,python实现登录12306网站查看火车票信息,Python开发基础不牢

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。‘Y’,  Y表示可以购票,N表示不可以。

2401_83974590的博客 1020

获取B站某用户更多的关注数和粉丝数

获取B站某用户更多的关注数和粉丝数 相关记录 一、 前言 B 站最多只能翻 5 页用户的关注数和粉丝数,如何能够看到更多呢。 方法我也是从网上翻来的,记载博客里,算是我研究过这个话题了。 二、需要的东西 关注数的 api https://api.bilibili.com/x/relation/followings?vmid=2884629&pn=1&ps=20&order=desc&jsonp=jsonp 关注者(粉丝)的 api https://api.bilibili.

Enderman_xiaohei的博客 4817

Langchain实现Agent

本文介绍了基于LangChain和MCP技术实现的智能代理系统。系统通过Python虚拟环境隔离运行,支持股票分析、员工管理、高铁查询等多种功能。核心技术包括:1)使用FastMCP构建本地和HTTP服务;2)集成多服务器MCP客户端实现工具调用;3)采用Gradio构建交互界面。典型应用场景包括:实时股票走势分析(如中芯国际)、员工信息管理(含薪资结构)、高铁票务查询(西安到北京)以及个性化投资建议生成。系统特别设计了不同薪资层级员工的股票配置方案,并支持实时火车票查询和差旅预算计算。

haylee的专栏 717

Unity动态创建Avatar骨骼映射

Unity Avatar骨骼映射动态创建,适配Unity通用动画,无需经过第三方建模软件,可运行时创建

Nbin_Newby的博客 1万+

解读区块链在制药和物流管理中具备的优势

供应链透明度是建立药品弹性供应链的关键,如何更好地促进端到端的透明度,促进合作伙伴和消费者之间的信任度是当前医药和物流行业高管们关注的话题,区块链技术可以很好的帮助他们。 链集市 · 让区块链落地更简单 《区块链行业观察》专栏·第 31 篇 作者丨Shams Rahman 图片丨来源于网络 作者介绍:本文作者为Shams Rahman教授,是RMIT大学商业IT和物流学院的供应链管理教授、研究与创新部门副主任。本文中文版本由链集市团队编译整理,英文版权归原作者所有,中文转载请联系编译。 新冠肺炎疫情的爆发

CECBC的博客 623

开发基于地图的火车站点查询系统

一、获取火车站点数据 1. 通过12306月排班表拿到所有的车次信息,从而可以获取所有车次的信息 URL: https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0 下图是2019-02-10时间访问获取到的数据   2.拿到全国所有车站的电码信息编号 URL:https://kyfw....

3663

SpringBoot+VUE3实战:如何用WebSocket搞定网页端语音通话(避坑指南)

本文详细介绍了如何使用SpringBoot和VUE3结合WebSocket技术实现网页端语音通话功能。从环境配置、WebSocket服务端实现到前端音频处理,提供了完整的开发指南和避坑建议,帮助开发者快速构建稳定高效的实时语音通信系统。

weixin_29021195的博客 221

【Python爬虫】获取全国客运列车车次及起讫站点位置信息

【本文更新于2020-7-24】 利用Python,通过对列车车次查询网站的内容进行爬虫爬取,获得全国客运列车车次及其起讫站点位置信息(经纬度)。值得注意的是,这些地点的坐标基于高德坐标系,因此在可视化的过程中,推荐使用高德开放平台的“数据可视化”功能。 下面给出参考代码。 注意: (1)在使用高德开放平台提供的各项功能之前,需申请密钥(key)。这一加密字符串的功能,类似百度平台的“ak”。 (2)在使用Python爬虫前,需安装requests、bs4等库。 (3)高德开放平台提供的各项功能的使用方法,

ZuoZuodeSiXiang的博客 2738

在鸿蒙中使用AVPlayer完成视频的播放【坚果派】

播放的全流程包含:创建AVPlayer,设置播放资源和窗口,设置播放参数(音量/倍速/缩放模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。5.准备播放:调用prepare(),AVPlayer进入prepared状态,此时可以获取duration,设置缩放模式、音量等。8.退出播放:调用release()销毁实例,AVPlayer进入released状态,退出播放。6.视频播控:播放play(),暂停pause(),跳转seek(),停止stop() 等操作。今天我们来看一下视频如何正常播放。

坚果的博客 4054

【BUG已解决】ImportError: cannot import name ‘OpenAI‘ from ‘openai‘ 解决方案

的核心是版本不匹配用确认当前版本如果是 0.x 版本 →升级到 1.x升级后代码语法要同步改为团队协作项目务必在中锁定版本号,避免"我这能跑,你那不能跑"的问题对接国产模型时,只需替换base_url参数,SDK 调用方式完全一致。

一键难忘的博客 1万+

12306车站信息爬取(4)——添加车票的票价信息

在前三篇文章的基础上: 12306车站信息爬取(1)——输入条件的判断,包括出发站,到达站,和出发时间,并获取车次信息的链接 12306车站信息爬取(2)——输入出发站,到达站和出发时间,获取车次信息的列表 12306车站信息爬取(3)——使用prettytable模块和colorama模块使输出结果美化 我们已经可以将车站的余票信息获取出来,但是还有一点不足,那就是车票的票价信息没有获取...

橘子女侠 3257

无实习经验?IT应届生简历封神思路:把校园经历写成offer收割机

摘要: IT应届生无实习经历如何打造竞争力简历?本文揭秘“无实习简历封神指南”,通过四大步骤将校园经历转化为HR认可的硬核技能: 素材挖掘:课程设计、个人项目、社团活动、竞赛证书都是隐藏的“实战经验”,用STAR法则细化成果。 技能转化:匹配岗位JD关键词,用“动词+量化结果”包装经历(如“优化查询效率30%”)。 避坑指南:避免流水账、夸大技能或堆砌无关经历,聚焦技术能力与岗位需求。 核心逻辑:HR看重潜力而非经验,用校园经历证明学习能力、问题解决能力和技术落地能力。 无实习≠无竞争力,学会“翻译”经历,

通俗易懂学IT 420

12306列车时刻表查询api功能实现

最近乘坐火车,在车上像快要看看列车时刻表,大概知道什么时间到达什么车站,起初是每次都打开12306APP查询,然后感觉每次打开APP很麻烦,就去微信小程序里边搜索,果然有我们伟大的猿类同胞做了这件事。于是乎,我就想12306是不是有开放平台提供了接口供我们使用,查了查竟然没有,聚合数据有此类接口(https://www.juhe.cn/docs/api/id/22),还是收费的。身为一个勤劳好学的...

江南极客 2万+

C++ Qt6 qml CMakeLists.txt如何添加qrc文件

本文介绍了在Qt6项目中如何通过CMake管理QML图片资源。相比Qt5的qmake,CMake需要手动创建qrc文件并配置CMakeLists.txt。关键步骤包括:1)创建resources.qrc文件并添加图片资源;2)在CMakeLists.txt中设置CMAKE_AUTORCC为ON开启自动资源处理;3)使用qt_add_resources将qrc文件绑定到项目。配置完成后,可通过"qrc:alias"方式引用资源图片,解决了相对路径管理复杂的问题。

琅嬛福地 1453

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python计算两地之间的开车时间,保存到Excel中

python计算两地之间的开车时间,保存到Excel中

运维@小兵的博客 1592

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python实战:获取全国火车站、高铁站信息(附完整代码)

通过本文可以获取3091个全国火车站的车站名称、所属铁路局、车站电报码、售票时间等信息。

stormhou的博客 4211

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python12306源码_春运了,Python大神分享爬取12306车票信息的例子,附抢票源码

爬虫:爬虫的根本就是得到一个网页的源代码数据。更深入一些,就会出现和网页进行POST交互从而获取服务器接收POST请求后返回的数据!总结:爬虫就是由计算机自动与服务器交互获取数据的工具。(爬虫请注意网站的Robot.txt文件!不要让爬虫违法!也不要让爬虫对网站造成伤害!)下面让我们怎么爬虫查看12306网站。1、首先打开12306余票查询的界面https://kyfw.12306.cn/otn/...

weixin_35868872的博客 1632

用Node.js做一个火车票查询小工具

github地址: https://github.com/KKDestiny/TrainTicket12306.git 演示地址:http://tickets.onelib.biz/ TrainTicket12306 这是一款用于在铁道部12306官网爬取车票等信...

Toffee Code 1162

深度学习 zuoye4

Download Dataset 有三個檔案,分別是training_label.txt、training_nolabel.txt、testing_data.txt training_label.txt:有label的training data(句子配上0 or 1) training_nolabel.txt:沒有label的training data(只有句子),用来做半监督学习,约120万句句子。 比如: hates being this burnt !! ouch,前面没有0或者1的标签 test

qq_43573054的博客 879

Java获取12306余票信息(三)

有关获取余票信息的票价的问题 API: https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=5s000G731900&amp;from_station_no=05&amp;to_station_no=08&amp;seat_types=O9MO&amp;train_date=2018-04-03 分析这个api可以...

wufeiwua的博客 1211
上一篇: Django mongoDB 主键ID 随机唯一标识码
下一篇: Django项目实战:在线作业管理系统(1)
PFFFei
博客等级 码龄9年 137粉丝 17原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值