一共分为俩个函数

1,获取城市的各个缩写

def city_number():#获取城市各地区缩写如 "北京":"KCN"

ko=[]

lp=[]

html=requests.get("https://kyfw.12306.cn/otn/resources/js/framework/station_name.js",headers=headers)

htmls=html.content.decode()

opp=htmls[:len(htmls)-1].split("=")[1]

lists_opp=opp.split("|")

for name in lists_opp:

if "@" in name:

lists_opp.remove(name)

for i in range(len(lists_opp)):

if i % 2==0:

ko.append(lists_opp[i])

else :

lp.append(lists_opp[i])

#print(lists_opp)

return dict(zip(ko,lp))

2 ,输入出入发地  得到i结果

def station_infos():

while True:

zidian=city_number()

left=input("请输入出发地:")

lefts=zidian[left]

right=input("请输入到达地:")

time.strftime("")

rights=zidian[right]

shijian=time.strftime("%Y-%m-%d")#格式化时间,,,今天时间

times=input("请输入时间(%s):"%shijian)

if len(times)==0:

times=shijian

html=requests.get("https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc&fs=%E5%8E%A6%E9%97%A8,XMS&ts=%E6%BD%A2%E5%B7%9D,KCN&date=2019-10-20&flag=N,N,Y",headers=headers)

for index_url in html.cookies:

Cookies[index_url.name]=index_url.value

r=requests.session()

hui=r.get("https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station=        {}&purpose_codes=ADULT".format(times,lefts,rights),headers=headers,cookies=Cookies)

big_car=json.loads(hui.text)['data']['map']

pop=list(big_car.values())

#number_info=len(json.loads(hui.text)['data']['result'])#几辆火车

station_info=json.loads(hui.text)['data']['result']

if len(station_info)==0:

print("当前无车次")

else:

for info in station_info:

data_list=info.split("|")

train_no=data_list[2]

kop="https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no={}&from_station_no={}&to_station_no={}&seat_types={}&train_date=          {}".format(train_no,data_list[16],data_list[17],data_list[35],times)

prices=r.get(kop,headers=headers,cookies=Cookies)#获取车票价钱

ko=json.loads(prices.text)

train_number = data_list[3] #1,车次

go_time = data_list[8] # 2,出发时间

arrive_time = data_list[9] # 3到达时间

cost_time = data_list[10] # 4历时

special_class_seat = data_list[32] or '--' # 5 商务/特等座

first_class_seat = data_list[31] or '--' #6 一等座

second_class_seat = data_list[30] or '--' # 7二等座

soft_sleep = data_list[23] or '--' #9 软卧

hard_sleep = data_list[28] or '--' # 10硬卧

hard_seat = data_list[29] or '--' # 11硬座

no_seat = data_list[26] or '--' # 12无座

if 'M' and 'O' in ko['data']:

st=ko['data']['A9']#商务座/特等座

first=ko['data']['M']#一等座

sec=ko['data']['O']#二等座

wz=ko['data']['WZ']#无座价钱

print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 价钱:{} 一等座:{} 价钱:{} 二等座:{} 价钱:{} 软卧:{} 硬卧:{} 硬座:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,st,first_class_seat,first,second_class_seat,sec,soft_sleep,hard_sleep,hard_seat,no_seat,wz,data_list[13]))

elif 'A1' in ko['data']:

yingz=ko['data']['A1']#硬座价钱

yingw=ko['data']['A3']#硬卧价钱

ruanwz=ko['data']['A4']#软卧价钱

wz=ko['data']['WZ']#无座价钱

print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 一等座:{} 二等座:{} 软卧:{}价钱:{} 硬卧:{}价钱:{} 硬座:{}价钱:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,first_class_seat,second_class_seat,soft_sleep,ruanwz,hard_sleep,yingw,hard_seat,yingz,no_seat,wz,data_list[13]))

elif 'A9' and 'A1' in ko['data']:

st=ko['data']['A9']#商务座/特等座

first=ko['data']['M']#一等座

sec=ko['data']['O']#二等座

wz=ko['data']['WZ']#无座价钱

yingz=ko['data']['A1']#硬座价钱

yingw=ko['data']['A3']#硬卧价钱

ruanwz=ko['data']['A4']#软卧价钱

print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 价钱:{} 一等座:{} 价钱:{} 二等座:{} 价钱:{} 软卧:{}价钱:{} 硬卧:{}价钱:{} 硬座:{}价钱:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,st,first_class_seat,first,second_class_seat,sec,soft_sleep,ruanwz,hard_sleep,yingw,hard_seat,yingz,no_seat,wz,data_list[13]))

3,以下是完整代码

import requests

import json

import time

headers={

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"

}

Cookies={}

def station_infos():

while True:

zidian=city_number()

left=input("请输入出发地:")

lefts=zidian[left]

right=input("请输入到达地:")

time.strftime("")

rights=zidian[right]

shijian=time.strftime("%Y-%m-%d")#格式化时间,,,今天时间

times=input("请输入时间(%s):"%shijian)

if len(times)==0:

times=shijian

html=requests.get("https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc&fs=%E5%8E%A6%E9%97%A8,XMS&ts=%E6%BD%A2%E5%B7%9D,KCN&date=2019-10-20&flag=N,N,Y",headers=headers)

for index_url in html.cookies:

Cookies[index_url.name]=index_url.value

r=requests.session()

hui=r.get("https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT".format(times,lefts,rights),headers=headers,cookies=Cookies)

big_car=json.loads(hui.text)['data']['map']

pop=list(big_car.values())

#number_info=len(json.loads(hui.text)['data']['result'])#几辆火车

station_info=json.loads(hui.text)['data']['result']

if len(station_info)==0:

print("当前无车次")

else:

for info in station_info:

data_list=info.split("|")

train_no=data_list[2]

kop="https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no={}&from_station_no={}&to_station_no={}&seat_types={}&train_date={}".format(train_no,data_list[16],data_list[17],data_list[35],times)

prices=r.get(kop,headers=headers,cookies=Cookies)#获取车票价钱

ko=json.loads(prices.text)

train_number = data_list[3] #1,车次

go_time = data_list[8] # 2,出发时间

arrive_time = data_list[9] # 3到达时间

cost_time = data_list[10] # 4历时

special_class_seat = data_list[32] or '--' # 5 商务/特等座

first_class_seat = data_list[31] or '--' #6 一等座

second_class_seat = data_list[30] or '--' # 7二等座

soft_sleep = data_list[23] or '--' #9 软卧

hard_sleep = data_list[28] or '--' # 10硬卧

hard_seat = data_list[29] or '--' # 11硬座

no_seat = data_list[26] or '--' # 12无座

if 'M' and 'O' in ko['data']:

print("风格化法国")

st=ko['data']['A9']#商务座/特等座

first=ko['data']['M']#一等座

sec=ko['data']['O']#二等座

wz=ko['data']['WZ']#无座价钱

print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 价钱:{} 一等座:{} 价钱:{} 二等座:{} 价钱:{} 软卧:{} 硬卧:{} 硬座:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,st,first_class_seat,first,second_class_seat,sec,soft_sleep,hard_sleep,hard_seat,no_seat,wz,data_list[13]))

elif 'A1' in ko['data']:

print("和梵蒂冈")

yingz=ko['data']['A1']#硬座价钱

yingw=ko['data']['A3']#硬卧价钱

ruanwz=ko['data']['A4']#软卧价钱

wz=ko['data']['WZ']#无座价钱

print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 一等座:{} 二等座:{} 软卧:{}价钱:{} 硬卧:{}价钱:{} 硬座:{}价钱:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,first_class_seat,second_class_seat,soft_sleep,ruanwz,hard_sleep,yingw,hard_seat,yingz,no_seat,wz,data_list[13]))

elif 'A9' and 'A1' in ko['data']:

print("改好发给")

st=ko['data']['A9']#商务座/特等座

first=ko['data']['M']#一等座

sec=ko['data']['O']#二等座

wz=ko['data']['WZ']#无座价钱

yingz=ko['data']['A1']#硬座价钱

yingw=ko['data']['A3']#硬卧价钱

ruanwz=ko['data']['A4']#软卧价钱

print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 价钱:{} 一等座:{} 价钱:{} 二等座:{} 价钱:{} 软卧:{}价钱:{} 硬卧:{}价钱:{} 硬座:{}价钱:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,st,first_class_seat,first,second_class_seat,sec,soft_sleep,ruanwz,hard_sleep,yingw,hard_seat,yingz,no_seat,wz,data_list[13]))

def city_number():#获取城市各地区缩写如 "北京":"KCN"

ko=[]

lp=[]

html=requests.get("https://kyfw.12306.cn/otn/resources/js/framework/station_name.js",headers=headers)

htmls=html.content.decode()

opp=htmls[:len(htmls)-1].split("=")[1]

lists_opp=opp.split("|")

for name in lists_opp:

if "@" in name:

lists_opp.remove(name)

for i in range(len(lists_opp)):

if i % 2==0:

ko.append(lists_opp[i])

else :

lp.append(lists_opp[i])

#print(lists_opp)

return dict(zip(ko,lp))

if __name__=="__main__":

station_infos()

python火车票票价_python的requests库爬取火车票信息和所需价钱相关推荐

  1. python获取网页json返回空_Python用requests库爬取返回为空的解决办法

    首先介紹一下我們用360搜索派取城市排名前20. 我们爬取的网址:https://baike.so.com/doc/24368318-25185095.html 我们要爬取的内容: html字段: r ...

  2. python画罗小黑_Python3+requests库爬取豆瓣《罗小黑战记》评论

    贴一下抓到的评论,最后几条的 本渣是在校学生(非计算机相关),今年上半年接触Python,然后暑假开始学着写爬虫. 新手,本文如有错误,谢谢指正. 这个爬虫开始思路有点乱,现在比较清晰了 思路:req ...

  3. python爬豆瓣电视剧_python requests库爬取豆瓣电视剧数据并保存到本地详解

    首先要做的就是去豆瓣网找对应的接口,这里就不赘述了,谷歌浏览器抓包即可,然后要做的就是分析返回的json数据的结构: https://movie.douban.com/j/search_subject ...

  4. python使用requests库爬取淘宝指定商品信息

    python使用requests库爬取淘宝指定商品信息 在搜索栏中输入商品 通过F12开发者工具抓包我们知道了商品信息的API,同时发现了商品数据都以json字符串的形式存储在返回的html内 解析u ...

  5. 用python爬取qq空间内容_利用Fiddler抓包和py的requests库爬取QQ空间说说内容并写入文件...

    [Python] 纯文本查看 复制代码#!C:\Program Files\Python36 python # -*- coding: UTF-8 -*- """ @au ...

  6. 用Requests库爬取微博照片

    用Requests库爬取微博照片 代码如下: #微博图片爬取 import requests import os #文件目录方法模块 url="https://wx3.sinaimg.cn/ ...

  7. python实现对python123平台题库爬取

    最近在搞软件工程课程设计,做了一个在线考试系统,为了弄到题库数据,简单利用了python中的selenium库实现对python123平台自动登录并获取相应的选择试题. 实现自动登录并获取题目 只针对 ...

  8. 使用Python和selenium的Chromedriver模拟登陆爬取网站信息(beautifulsoup)

    爬取的信息很多,所以需要设置断点,在程序重启时能继续爬取.并且能在断掉之后自动重启. 1.setting.py 对爬取的常量进行设置 """ 基本信息设置 "& ...

  9. 利用python requests库爬取淘宝商品评论_python

    文章目录 一.起因 二.项目实现 1. 分析实现方式 2. 编码实现 3. 完整代码 三.思考与改进 一.起因 看到一篇文章,感觉自己可以动手试试 Python 不用selenium 带你高效爬取京东 ...

  10. python爬取图片的库_16-python爬虫之Requests库爬取海量图片

    Requests 是一个 Python 的 HTTP 客户端库. Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和P ...

最新文章

  1. 深度学习入门Fast.ai 2.0上线!自带中文字幕,所有笔记、资源全部免费!
  2. 是不是“异常”让我的脑子糊涂了?
  3. XML file does not appear to have any style information associated with it. XHTML程序出现这个错误
  4. .NET各版本一览表
  5. php中的$_server,细说PHP中的$_SERVER
  6. mysql query browser的使用_影响MySQL性能的配置参数
  7. 深入理解BS结构应用程序
  8. 移动端机器学习模型压缩也自动化了:腾讯新框架为自家模型加速50%
  9. 雪,是死掉的雨,是雨的精魂
  10. java 2 swing_Java Swing2 基本登錄框
  11. JAVA读取配置文件工具类
  12. Qt学习视频资料汇总
  13. java 图片md5码_java 对图片进行MD5算法
  14. Arduino UNO测试BME280温湿度气压传感器
  15. 论文中的三线表及表格规范
  16. k64 datasheet学习笔记1---概述
  17. 暴力破解word文档限制编辑加密保护
  18. 如果改计算机mac,怎么修改计算机mac_修改计算机mac
  19. PHP实现短网址规则,使用PHP生成短网址的方案
  20. discuz论坛中,如何上传并插入一段本地视频,并支持实时展示、实时播放

热门文章

  1. Springboot配置多个数据源
  2. 计算机网络共享打不开,电脑只要打开共享提示“无法启用共享访问”如何解决...
  3. Session Fixation
  4. kryo com.esotericsoftware.kryo.KryoException: Buffer underflow.
  5. 深度学习方法的超分辨率(Super-resolution)方向论文【不定期更新】
  6. LayUI中的基本元素之进度条
  7. MTK6737功能展示
  8. 密立根油滴实验的c语言程序,密立根油滴实验数据处理程序c++
  9. Shinobi视频监控平台
  10. java计算机毕业设计共享充电宝管理系统MyBatis+系统+LW文档+源码+调试部署