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&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">"]) 运行效果如下: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |