广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python爬虫之12306网站--火车
  • 574
分享到

python爬虫之12306网站--火车

爬虫火车网站 2023-01-30 23:01:01 574人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

python爬虫之12306网站--火车票信息查询 思路: 1.火车票信息查询是基于车站信息查询,先完成车站信息查询,然后根据车站信息查询生成的url地址去查询当前已知出发站和目的站的所有车次车票信息 2.JSON文件存储当前从出发站到目

python爬虫之12306网站--火车票信息查询

思路:

1.火车票信息查询是基于车站信息查询,先完成车站信息查询,然后根据车站信息查询生成的url地址去查询当前已知出发站和目的站的所有车次车票信息

2.JSON文件存储当前从出发站到目的站的所有车次的详细信息

3.对json文件进行分析

4.分类查询车票(高铁、火车)

1.json文件:在12306页面选择"车票"》"单程",打开"开发人员工具",然后输入出发地、目的地

对json文件进行分析,发现是嵌套的字典,车次的所有详细信息存储在"result"中

选择一条数据然后对其进行分析,找到自己想要的数据(例如车次在的位置,出发站、到达站、座位的种类等等)

这里用的是notepad++软件,把"|"替换为"\r",这样就方便自己找到想要的数据对应的位置

代码如下:

#python 火车票信息的查询
import requests
url1="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9090"
txt=requests.get(url1).text
inf=txt[:-2].split("@")[1:]
#print(inf)
stations={}
for record in inf:
    rlist=record.split("|")
    stations[rlist[2]]={"cn":rlist[1],"qp":rlist[3],"jp":rlist[4]}  #把车站编码当作key
#print(stations)
def getcode(t):
    while True:
        s1=input("%s站:"%t)
        r1=[]
        for id,station in stations.items():
            if s1 in station.values():
                r1.append((id,station))
        if r1:
            break
        print("没有这个车站。")
        print("请重新输入。")
    if len(r1)==1:
        sid=r1[0][0]
    else:
        print("你需要在以下车站里选择:")
        for i in range(len(r1)):
            print(i+1,r1[i][1]["cn"])
        sel=int(input("你的选择是:"))-1
        sid=r1[sel][0]
    return sid
fromstation=getcode("出发")
tostation=getcode("到达")
chufatime=input("出发日期(格式2019-01-01):").strip()
qurl="Https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT".fORMat(chufatime,fromstation,tostation)
print(qurl)
print("你输入的查询条件是:出发站=%s,到达站=%s"%(stations[fromstation]["cn"],stations[tostation]["cn"]))
ainf=requests.get(qurl).json()["data"]["result"]  #json文件存储当前从出发站到目的站的所有车次的详细信息
#print(ainf,type(ainf))
result=[]
for i in ainf:
    list=i.split("|")
    checi=list[3]
    chufa=stations[list[6]]["cn"]
    mudi=stations[list[7]]["cn"]
    ftime=list[8]
    dtime=list[9]
    sw=list[32]
    yd=list[31]
    rw=list[23]
    yw=list[26]
    wuzuo=list[28]
    ed=list[30]
    yz=list[29]
    result.append((checi,chufa,mudi,ftime,dtime,sw,yd,ed,yz,yw,rw,wuzuo))
#print(result)
print("车次\t出发站\t到达站 出发时间 到达时间 商务座 一等座 二等座 硬座  硬卧  软卧  无座 ")
for i in result:
    for n in range(len(i)):
        print(i[n],end="\t")
    print()

 

运行效果如下:

上面显示的太不友好了,这里用prettytable库(需要安装)

from  prettytable import PrettyTable
............
............
table=PrettyTable(["车次","出发站","目的站","发车时间","到达时间","商务座","一等座","二等座","硬座","硬卧","软卧","无座"])
for i in  result:
    table.add_row([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11]])
print(table)

运行效果如下:

4.分类查询车票

import requests
from  prettytable import PrettyTable
url1="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9090"
txt=requests.get(url1).text
inf=txt[:-2].split("@")[1:]
#print(inf)
stations={}
for record in inf:
    rlist=record.split("|")
    stations[rlist[2]]={"cn":rlist[1],"qp":rlist[3],"jp":rlist[4]}  #把车站编码当作key
#print(stations)
def getcode(t):
    while True:
        s1=input("%s站:"%t)
        r1=[]
        for id,station in stations.items():
            if s1 in station.values():
                r1.append((id,station))
        if r1:
            break
        print("没有这个车站。")
        print("请重新输入。")
    if len(r1)==1:
        sid=r1[0][0]
    else:
        print("你需要在以下车站里选择:")
        for i in range(len(r1)):
            print(i+1,r1[i][1]["cn"])
        sel=int(input("你的选择是:"))-1
        sid=r1[sel][0]
    return sid
fromstation=getcode("出发")
tostation=getcode("到达")
chufatime=input("出发日期(格式2019-01-01):").strip()
qurl="https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT".format(chufatime,fromstation,tostation)
print(qurl)
print("你输入的查询条件是:出发站=%s,到达站=%s"%(stations[fromstation]["cn"],stations[tostation]["cn"]))
ainf=requests.get(qurl).json()["data"]["result"]  #json文件存储当前从出发站到目的站的所有车次的详细信息
#print(ainf,type(ainf))
result=[]
gaotie=[]
huoche=[]
for i in ainf:
    list=i.split("|")
    checi=list[3]
    chufa=stations[list[6]]["cn"]
    mudi=stations[list[7]]["cn"]
    ftime=list[8]
    dtime=list[9]
    sw=list[32]
    yd=list[31]
    rw=list[23]
    yw=list[26]
    wuzuo=list[28]
    ed=list[30]
    yz=list[29]
    result.append((checi,chufa,mudi,ftime,dtime,sw,yd,ed,yz,yw,rw,wuzuo))
    if checi[0] in ["G","D"]:
        gaotie.append([checi,chufa,mudi,ftime,dtime,sw,yd,ed])
    else:
         huoche.append([checi,chufa,mudi,ftime,dtime,yz,yw,rw,wuzuo])
#print(result)
while True:
    print("请输入查看信息:1、全部    2、高铁、动车     3、火车 4、退出")
    show=int(input("请选择:"))
    if show==1:
        table=PrettyTable(["车次","出发站","目的站","发车时间","到达时间","商务座","一等座","二等座","硬座","硬卧","软卧","无座"])
        for i in result:
            table.add_row([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11]])
        print(table)
    elif show==2:
        table=PrettyTable(["车次","出发站","目的站","发车时间","到达时间","商务座","一等座","二等座"])
        for i in gaotie:
            table.add_row([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]])
        print(table)
    elif show==3:
        table=PrettyTable(["车次","出发站","目的站","发车时间","到达时间","硬座","硬卧","软卧","无座"])
        for i in huoche:
            table.add_row([i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8]])
        print(table)
    elif show==4:
        print("查询结束!")
        break
    else:
        print("输入错误请重新输入!")

运行效果如下:

 

--结束END--

本文标题: python爬虫之12306网站--火车

本文链接: https://www.lsjlt.com/news/180961.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python爬虫之12306网站--火车
    python爬虫之12306网站--火车票信息查询 思路: 1.火车票信息查询是基于车站信息查询,先完成车站信息查询,然后根据车站信息查询生成的url地址去查询当前已知出发站和目的站的所有车次车票信息 2.json文件存储当前从出发站到目...
    99+
    2023-01-30
    爬虫 火车 网站
  • python爬虫之12306网站--车站
    python爬虫查询车站信息 目录: 1.找到要查询的url 2.对信息进行分析 3.对信息进行处理 python爬虫查询全拼相同的车站 目录: 1.找到要查询的url 2.对信息进行分析 3.对信息进行处理 1.找到车站信息的url ...
    99+
    2023-01-30
    爬虫 车站 网站
  • Python爬虫之自动爬取某车之家各车销售数据
    目录一、目标网页分析二、数据请求三、数据解析四、数据存储五、采集结果预览一、目标网页分析 目标网站是某车之家关于品牌汽车车型的口碑模块相关数据,比如我们演示的案例奥迪Q5L的口碑页面...
    99+
    2022-11-12
  • python之网络爬虫
    一、演绎自已的北爱         踏上北漂的航班,开始演奏了我自已的北京爱情故事二、爬虫11、网络爬虫的思路首先:指定一个url,然后打开这个url地址,读其中的内容。其次:从读取的内容中过滤关键字;这一步是关键,可以通过查看源代码的方式...
    99+
    2023-01-31
    爬虫 网络 python
  • python爬虫:爬取网站视频
    python爬取百思不得姐网站视频:http://www.budejie.com/video/新建一个py文件,代码如下:#!/usr/bin/python # -*- coding: UTF-8 -*- import urllib,re...
    99+
    2023-01-31
    爬虫 视频 网站
  • Python爬虫爬取网站图片
    此次python3主要用requests,解析图片网址主要用beautiful soup,可以基本完成爬取图片功能, 爬虫这个当然大多数人入门都是爬美女图片,我当然也不落俗套,首先也...
    99+
    2022-11-12
  • python爬虫之小说网站--下载小说(
    python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/2447.html) 2.分析自己要得到的内...
    99+
    2023-01-30
    爬虫 小说网站 小说
  • Python爬虫实战之用selenium爬取某旅游网站
    目录一、selenium实战二、打开艺龙网三、精确目标四、成功结语一、selenium实战 这里我们只会用到很少的selenium语法,我这里就不补充别的用法了,以实战为目的 二、打开艺龙网 可以直接点击这里进入:艺...
    99+
    2022-06-02
    Python selenium爬取网站 python爬虫
  • Python爬虫之爬取最新更新的小说网站
    目录一、引言二、关于相关访问请求及应答报文2.1、百度搜索请求2.2、百度返回搜索结果2.3、小说网站关于最新更新的展现及html报文格式三、实现思路及代码3.1、根据url获取网站...
    99+
    2022-11-12
  • Python爬虫之网络请求
    目录1.IP代理2.Cookie3.异常处理 1.IP代理 某些网站会检测一段时间内某IP的访问次数,若访问次数过多会禁止访问,这时需要设置一些代理服务器,每隔一段时间换一...
    99+
    2022-11-10
  • Python网络爬虫之HTTP原理
    目录⭐️爬虫基础🌟HTTP 基本原理✨URI和 URL✨超文本✨HTTP 和HTTPS ✨HTTP 请求过程✨请求✨响应⭐️爬虫基础 在写爬虫之前,我们还需要了解一些基础知...
    99+
    2023-05-15
    Python网络爬虫HTTP原理 Python网络HTTP原理 Python HTTP原理
  • python爬虫爬网站的视频和图片
    环境:centos6.5 python2.6.6   http://www.budejie.com/( 纯属测试,并无恶意 )网站分析:我们点视频按钮 可以看到url是:http://www.budejie.com/video/接着我们点开...
    99+
    2023-01-31
    爬虫 图片 网站
  • 如何用Python爬虫爬取美剧网站
    如何用Python爬虫爬取美剧网站,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。爬虫爬取美剧网站!【前言】一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打...
    99+
    2023-06-02
  • Python爬虫中自动爬取某车之家各车销售数据的示例分析
    这篇文章主要介绍Python爬虫中自动爬取某车之家各车销售数据的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、目标网页分析目标网站是某车之家关于品牌汽车车型的口碑模块相关数据,比如我们演示的案例奥迪Q5L...
    99+
    2023-06-15
  • python中如何爬取汽车之家网站上的图片
    这篇文章主要介绍了python中如何爬取汽车之家网站上的图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的数据类型有哪些python的数据类型:1. 数字类型,...
    99+
    2023-06-14
  • Python网络爬虫之Web网页基础
    目录⭐️Web网页基础🌟1.网页的组成✨HTML✨CSS✨JavaScript🌟2.网页的结构🌟3.节点树和节点间的关系🌟4.选择器🌟5.总结⭐️Web网页基础 我们在学习爬虫之前,...
    99+
    2023-05-15
    Python网络爬虫Web网页基础 Python网络Web网页基础 Python Web网页基础
  • Python爬虫实例爬取网站搞笑段子
    众所周知,python是写爬虫的利器,今天作者用python写一个小爬虫爬下一个段子网站的众多段子。 目标段子网站为“http://ishuo.cn/”,我们先分析其下段子的所在子页的url特点,可以轻易发...
    99+
    2022-06-04
    爬虫 段子 实例
  • 如何利用Python爬虫爬取网站音乐
    小编给大家分享一下如何利用Python爬虫爬取网站音乐,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体实现引入发送网络请求的第三方库import re...
    99+
    2023-06-15
  • 如何使用Python爬虫爬取网站图片
    这篇文章主要介绍了如何使用Python爬虫爬取网站图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。此次python3主要用requests,解析图片网址主要用beautif...
    99+
    2023-06-22
  • python爬虫之利用Selenium+Requests爬取拉勾网
    目录一、前言二、分析url三、获取所有城市和页数四、生成params参数五、获取数据六、总结一、前言 利用selenium+requests访问页面爬取拉勾网招聘信息 二、分析url...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作