加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:57:29 所属栏目:Python 来源:网络整理
导读: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 s

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&amp;leftTicketDTO.to_station=%s&amp;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">"])

运行效果如下:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读