python爬虫查询车站信息

目录:

1.找到要查询的url

2.对信息进行分析

3.对信息进行处理

python爬虫查询全拼相同的车站

目录:

1.找到要查询的url

2.对信息进行分析

3.对信息进行处理

1.找到车站信息的url

2.分析车站信息,发现每个车站信息以"@"分隔

车站信息查询

#车站信息查询
import requests
#1.获得url(存取车站信息的url)并读取,根据获得信息的特点去掉无用的信息并转换存储到列表中
url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9090"
txt=requests.get(url).text
#print(txt)
inf=txt[:-2].split("@")[1:] #得到的是存储所有车站信息的列表
#print(inf)
#2.通过循环把列表在进行分割转换成新的列表,取其中一项(车站顺序编号)当做字典的key,其余当作值,存储到新的字典中
stations={}
for record in inf:
rlist=record.split("|")
stations[int(rlist[-1])]={"cname":rlist[1],"id":rlist[2],"qp":rlist[3],"jx":rlist[4]} #print(stations[0])
#print(stations.get(2848))
#print(stations.values())
#3.判断查询条件是否存在,存在如果唯一则打印并跳出循环,不唯一则显示查询的所有的结果,提供选择,根据选择的信息打印出结果然后跳出循环,不存在则打印提示信息,重新输出
while True:
s1=input("出发站:")
flag=0
result=[]
for station in stations.values():
if s1 in station.values():
#print(station)
result.append(station)
flag=1
if flag:
break
else:
print("没有这个车站!")
print("请重新输入!")
if len(result)==1:
resultId=result[0]["id"]
print("你输入的出发车站是%s,对应的车站ID是%s"%(result[0]["cname"],resultId))
else:
print("你输入的条件比较模糊,请在以下站中进行选择:")
for i in range(len(result)):
print(i+1,result[i]["cname"],result[i]["id"])
sel=int(input("你的选择:"))-1
resultId=result[sel]["id"]
print("你输入的出发车站是%s,对应的车站ID是%s"%(result[sel]["cname"],resultId))
while True:
s2=input("目的站:")
flag2=0
result2=[]
for station in stations.values():
if s2 in station.values():
#print(station)
result2.append(station)
flag2=1
if flag2:
break
else:
print("没有这个车站!")
print("请重新输入!")
if len(result2)==1:
result2Id=result2[0]["id"]
print("你输入的目的车站是%s,对应的车站ID是%s"%(result2[0]["cname"],result2Id))
else:
print("你输入的条件比较模糊,请在以下站中进行选择:")
for i in range(len(result2)):
print(i+1,result2[i]["cname"],result2[i]["id"])
sel2=int(input("你的选择:"))-1
result2Id=result2[sel2]["id"]
print("你输入的目的车站是%s,对应的车站ID是%s"%(result2[sel]["cname"],result2Id))
#生成一条带查询的url(url在浏览器开发者模式查找)
qurl="https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2019-01-14&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT"
print(qurl %(resultId,result2Id))

运行效果如下:

2.查询出所有全拼相同的所有车站名称 
#python 查询出所有全拼相同的所有车站名称
import requests
url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9090"
txt=requests.get(url).text
inf=txt[:-2].split("@")[1:]
stations={}
for record in inf:
rlist=record.split("|")
stations[int(rlist[-1])]={"cname":rlist[1],"id":rlist[2],"qp":rlist[3],"jx":rlist[4]} pyin=[]
for station in stations.values(): #把获得的信息所有的"qp"所对应的值全部放到列表中(pyin)
pyin.append(station["qp"])
npy=list(set(pyin)) #利用集合的去重特性对列表进行去掉重复项
npy.sort() #对列表进行排序
c={}
for station in stations.values(): #分别把所有的全拼当作键,值加入到新的字典当中
c[station["qp"]]=c.get(station["qp"],0)+1
#print(c)
c2=[]
for k,v in c.items(): #判断字典的值是否大于1,大于则说明存在全拼相同的车站名
if v>1:
c2.append(k) #把满足条件的所有的全拼加入到新的列表中
c2.sort()
#print(c2)
for p in c2: #遍历列表,打印出符合条件的车站
print(p,end=":")
for station in stations.values():
if p==station["qp"]:
print(station["cname"])

运行效果如下:

python爬虫之12306网站--车站信息查询的更多相关文章

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

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

  2. python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式)

    python爬虫之天气预报网站--查看最近(15天)的天气信息(正则表达式) 思路: 1.首先找到一个自己想要查看天气预报的网站,选择自己想查看的地方,查看天气(例:http://www.tianqi ...

  3. python+splinter实现12306网站刷票并自动购票流程

    python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...

  4. python爬虫抓取哈尔滨天气信息(静态爬虫)

    python 爬虫 爬取哈尔滨天气信息 - http://www.weather.com.cn/weather/101050101.shtml 环境: windows7 python3.4(pip i ...

  5. python爬虫之小说网站--下载小说(正则表达式)

    python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...

  6. Python爬虫某招聘网站的岗位信息

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:阿尔法游戏 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  7. 简单的python爬虫--爬取Taobao淘女郎信息

    最近在学Python的爬虫,顺便就练习了一下爬取淘宝上的淘女郎信息:手法简单,由于淘宝网站本上做了很多的防爬措施,应此效果不太好! 爬虫的入口:https://mm.taobao.com/json/r ...

  8. python爬虫1——获取网站源代码(豆瓣图书top250信息)

    # -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...

  9. python爬虫--模拟12306登录

    模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...

随机推荐

  1. Python机器学习笔记:XgBoost算法

    前言 1,Xgboost简介 Xgboost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器.因为Xgboost是一种提升树模型,所以它是将许多 ...

  2. Linux comm命令求出文件的交集、差集

    A(1,2,3)和B(3,4,5),A和B的交集是3,A对B的差集是1和2,B对A的差集是4和5,A和B求差的结果是1.2.4.5. 在Linux中可以使用comm命令求出这些集. [root@xue ...

  3. OpenCV入门之获取图像的旋转角度

      在我们的日常生活中,所碰到的图像往往都有一定的倾斜.那么,如何用OpenCV来获取图像的旋转角度呢?   我们以下面的图片为例,简单介绍如何用OpenCV来获取图像的旋转角度.   可以看到,该图 ...

  4. 更新计算机名称后TFS文件无法迁出

    本人最新刚刚最新了一下计算机名称,但在迁出TFS文件时报如下错误: 如果最近已重命名此计算机,则可通过运行“tf workspaces /updateComputerName:oldComputerN ...

  5. eclipse使用svn

    主干(trunk).分支(branch ).标记(tag) 用法示例 + 图解   以svn为例,git的master相当于trunk,dev分支相当于branches --------------- ...

  6. JSTL_Format标记库

    JSTL_Format 一:JSTL Format标记库 如有转载,请标明出处 介绍标记属性的时候,按照顺序必须写的->带有默认值的->其他的,中间用回车隔开 在jsp问价开头加上 < ...

  7. 【Java每日一题】20170329

    20170328问题解析请点击今日问题下方的“[Java每日一题]20170329”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...

  8. Java高并发--CPU多级缓存与Java内存模型

    Java高并发--CPU多级缓存与Java内存模型 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 CPU多级缓存 为什么需要CPU缓存:CPU的频率太快,以至于主存跟 ...

  9. python基础学习(二)注释和算术运算符

    注释 1. 注释的作用 注释就是对某些代码进行标注说明,以增强代码的可读性.我们在写程序的时候,编写的某一部分代码的意图不太明显,这时候就需要对这一部分代码加以说明,来明确这一部分到的意图.一般的编程 ...

  10. Flask 系列之 Bootstrap-Flask

    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 Bootstrap-Flask 来进行页面美化 ...