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

python爬虫之12306网站--车站信息查询,第1张

概述python爬虫查询车站信息目录:1.找到要查询的url2.对信息进行分析3.对信息进行处理python爬虫查询全拼相同的车站目录:1.找到要查询的url2.对信息进行分析3.对信息进行处理1.找到车站信息的url2.分析车站信息,发现每个车站信息以"@"分隔车站信息查询#车站信息查询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=0result=[]for station in stations.values():if s1 in station.values():#print(station)result.append(station)flag=1if flag:breakelse: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("你的选择:"))-1resultId=result[sel]["id"]print("你输入的出发车站是%s,对应的车站ID是%s"%(result[sel]["cname"],resultId))while True:s2=input("目的站:")flag2=0result2=[]for station in stations.values():if s2 in station.values():#print(station)result2.append(station)flag2=1if flag2:breakelse: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("你的选择:"))-1result2Id=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 requestsurl="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9090"txt=requests.get(url).textinf=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"])运行效果如下: 

1.找到要查询的url

2.对信息进行分析

3.对信息进行处理

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

url==inf=txt[:-2].split()[1:] stations= record =record.split(-1])]={:rList[1],:rList[2],:rList[3],:rList[4<span >#<span >print(stations[0])<span >

<span >print(stations.get(2848))
<span >
<span >print(stations.values())
<span >
<span >3.判断查询条件是否存在,存在如果唯一则打印并跳出循环,不唯一则显示查询的所有的结果,提供选择,根据选择的信息打印出结果然后跳出循环,不存在则打印提示信息,重新输出

<span >while<span > True:
s1=input(<span >"<span >出发站:<span >"<span >)
flag=<span >0
result=<span >[]
<span >for station <span >in<span > stations.values():
<span >if s1 <span >in<span > station.values():
<span >#<span >print(station)
<span > result.append(station)
flag=1
<span >if<span > flag:
<span >break
<span >else<span >:
<span >print(<span >"<span >没有这个车站!<span >"<span >)
<span >print(<span >"<span >请重新输入!<span >"<span >)
<span >if len(result)==1<span >:
resultID=result[0][<span >"<span >ID<span >"<span >]
<span >print(<span >"<span >你输入的出发车站是%s,对应的车站ID是%s<span >"%(result[0][<span >"<span >cname<span >"<span >],resultID))
<span >else<span >:
<span >print(<span >"<span >你输入的条件比较模糊,请在以下站中进行选择:<span >"<span >)
<span >for i <span >in<span > range(len(result)):
<span >print(i+1,result[i][<span >"<span >cname<span >"],result[i][<span >"<span >ID<span >"<span >])
sel=int(input(<span >"<span >你的选择:<span >"))-1<span >
resultID=result[sel][<span >"<span >ID<span >"<span >]
<span >print(<span >"<span >你输入的出发车站是%s,对应的车站ID是%s<span >"%(result[sel][<span >"<span >cname<span >"<span >],resultID))
<span >while<span > True:
s2=input(<span >"<span >目的站:<span >"<span >)
flag2=<span >0
result2=<span >[]
<span >for station <span >in<span > stations.values():
<span >if s2 <span >in<span > station.values():
<span >#<span >print(station)
<span > result2.append(station)
flag2=1
<span >if<span > flag2:
<span >break
<span >else<span >:
<span >print(<span >"<span >没有这个车站!<span >"<span >)
<span >print(<span >"<span >请重新输入!<span >"<span >)
<span >if len(result2)==1<span >:
result2ID=result2[0][<span >"<span >ID<span >"<span >]
<span >print(<span >"<span >你输入的目的车站是%s,对应的车站ID是%s<span >"%(result2[0][<span >"<span >cname<span >"<span >],result2ID))
<span >else<span >:
<span >print(<span >"<span >你输入的条件比较模糊,请在以下站中进行选择:<span >"<span >)
<span >for i <span >in<span > range(len(result2)):
<span >print(i+1,result2[i][<span >"<span >cname<span >"],result2[i][<span >"<span >ID<span >"<span >])
sel2=int(input(<span >"<span >你的选择:<span >"))-1<span >
result2ID=result2[sel2][<span >"<span >ID<span >"<span >]
<span >print(<span >"<span >你输入的目的车站是%s,对应的车站ID是%s<span >"%(result2[sel][<span >"<span >cname<span >"<span >],result2ID))
<span >#<span >生成一条带查询的url(url在浏览器开发者模式查找)
qurl=<span >"<span >https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2019-01-14&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADulT<span >"
<span >print(qurl %(resultID,result2ID))

运行效果如下:

===txt[:-2].split()[1= record =record.split(-1])]={:rList[1],:rList[4pyin=<span >[]
<span >for
station <span >in
stations.values(): <span >#
<span >把获得的信息所有的"qp"所对应的值全部放到列表中(pyin)

pyin.append(station[<span >"
<span >qp
<span >"
<span >])
npy
=List(set(pyin)) <span >#
<span >利用集合的去重特性对列表进行去掉重复项

npy.sort() <span >#
<span >对列表进行排序

c=<span >{}
<span >for
station <span >in
stations.values(): <span >#
<span >分别把所有的全拼当作键,值加入到新的字典当中

c[station[<span >"
<span >qp
<span >"
]]=c.get(station[<span >"
<span >qp
<span >"
],0)+1
<span >#
<span >print(c)

c2=<span >[]
<span >for
k,v <span >in
c.items(): <span >#
<span >判断字典的值是否大于1,大于则说明存在全拼相同的车站名

<span >if
v>1<span >:
c2.append(k)
<span >#
<span >把满足条件的所有的全拼加入到新的列表中

<span >c2.sort()
<span >#
<span >print(c2)

<span >for
p <span >in
c2: <span >#
<span >遍历列表,打印出符合条件的车站

<span >print
(p,end=<span >"
<span >:
<span >"
<span >)
<span >for
station <span >in
<span > stations.values():
<span >if
p==station[<span >"
<span >qp
<span >"
<span >]:
<span >print
(station[<span >"
<span >cname
<span >"
])

运行效果如下:

总结

以上是内存溢出为你收集整理的python爬虫之12306网站--车站信息查询全部内容,希望文章能够帮你解决python爬虫之12306网站--车站信息查询所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1207939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存