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

Python爬虫查询车站信息

查询的url

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

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 style="color: #008000">#<span style="color: #008000">print(stations[0])<span style="color: #008000">

<span style="color: #008000">print(stations.get(2848))<span style="color: #008000">

<span style="color: #008000">print(stations.values())<span style="color: #008000">

<span style="color: #008000">3.判断查询条件是否存在,存在如果唯一则打印并跳出循环,不唯一则显示查询的所有的结果,提供选择,根据选择的信息打印出结果然后跳出循环,不存在则打印提示信息,重新输出

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

运行效果如下:

查询出所有全拼相同的所有车站名称 
查询出所有全拼相同的所有车站名称 ===txt[:-2].split()[1= record =record.split(-1])]={:rlist[1],:rlist[4pyin=<span style="color: #000000">[]
<span style="color: #0000ff">for
station <span style="color: #0000ff">in
stations.values(): <span style="color: #008000">#
<span style="color: #008000">把获得的信息所有的"qp"所对应的值全部放到列表中(pyin)

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

npy.sort() <span style="color: #008000">#
<span style="color: #008000">对列表进行排序

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

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

c2=<span style="color: #000000">[]
<span style="color: #0000ff">for k,v <span style="color: #0000ff">in c.items(): <span style="color: #008000">#<span style="color: #008000">判断字典的值是否大于1,大于则说明存在全拼相同的车站名
<span style="color: #0000ff">if v>1<span style="color: #000000">:
c2.append(k) <span style="color: #008000">#<span style="color: #008000">把满足条件的所有的全拼加入到新的列表中
<span style="color: #000000">c2.sort()
<span style="color: #008000">#<span style="color: #008000">print(c2)
<span style="color: #0000ff">for p <span style="color: #0000ff">in c2: <span style="color: #008000">#<span style="color: #008000">遍历列表,打印出符合条件的车站
<span style="color: #0000ff">print(p,end=<span style="color: #800000">"<span style="color: #800000">:<span style="color: #800000">"<span style="color: #000000">)
<span style="color: #0000ff">for station <span style="color: #0000ff">in<span style="color: #000000"> stations.values():
<span style="color: #0000ff">if p==station[<span style="color: #800000">"<span style="color: #800000">qp<span style="color: #800000">"<span style="color: #000000">]:
<span style="color: #0000ff">print(station[<span style="color: #800000">"<span style="color: #800000">cname<span style="color: #800000">"])

运行效果如下:

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...