1 import requests
 2 from lxml import etree
 3
 4 '''访问“8684公交查询网”,抓取太原市公交路线:'''
 5
 6 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) '
 7                          'AppleWebKit/537.36 (KHTML, like Gecko) '
 8                          'Chrome/73.0.3683.86 Safari/537.36'}
 9
10 #用来保存公交路线信息
11 items = []
12
13 def get_navigation():
14     '''获取内容'''
15     url = 'https://taiyuan.8684.cn/'
16     print('正在获取导航链接')
17     r = requests.get(url,headers=headers)
18
19     #解析内容,获取导航跳转链接
20     tree = etree.HTML(r.text)
21     #查找以数字开头的路线链接
22     num_href_list = tree.xpath('//div[@class="bus_kt_r1"]/a/@href')
23     # 查找以字母开头的路线链接
24     char_href_list = tree.xpath('//div[@class="bus_kt_r2"]/a/@href')
25     #返回导航链接
26     return num_href_list + char_href_list
27
28 def get_route(navi_list):
29     #循环遍历链接列表,发送请求,获取每个链接下的公交路线
30     route_list = []
31     for i in navi_list:
32         route_url = 'https://taiyuan.8684.cn' + i
33         print('正在获取以%s开头的公交路线' %i)
34         r = requests.get(route_url,headers=headers)
35
36         #解析内容,获取公交路线
37         tree = etree.HTML(r.text)
38         href_list = tree.xpath('//div[@id="con_site_1"]/a/@href')
39         for href in href_list:
40             route_list.append(href)
41     return route_list
42
43 def get_info(route_list):
44     for route in route_list:
45         info_url = 'https://taiyuan.8684.cn' + route
46         r = requests.get(info_url,headers=headers)
47
48         #解析获取具体信息
49         tree = etree.HTML(r.text)
50         route_name = tree.xpath('//div[@class="bus_i_t1"]/h1/text()')[0]
51         print('正在获取%s的路线信息' % route_name)
52         run_time = tree.xpath('//p[@class="bus_i_t4"][1]/text()')[0]
53         ticket_price = tree.xpath('//p[@class="bus_i_t4"][2]/text()')[0]
54         update_time = tree.xpath('//p[@class="bus_i_t4"][4]/text()')[0]
55         station_num = tree.xpath('//div[@class="bus_line_top "]/span/text()')
56         if len(station_num) == 2:
57             up_num = station_num[0]
58             up_station_name = tree.xpath('//div[@class="bus_line_site "][1]/div/div/a/text()')
59             down_num = station_num[1]
60             down_station_name = tree.xpath('//div[@class="bus_line_site "][2]/div/div/a/text()')
61         else:
62             up_num = station_num[0]
63             down_num = station_num[0]
64             up_station_name = tree.xpath('//div[@class="bus_line_site "]/div/div/a/text()')
65             down_station_name = tree.xpath('//div[@class="bus_line_site "]/div/div/a/text()')
66
67         #写入字典
68         item = {'路线名':route_name,
69                 '运行时间':run_time,
70                 '票价':ticket_price,
71                 '更新时间':update_time,
72                 '上行站数':up_num,
73                 '上行站名':up_station_name,
74                 '下行站数':down_num,
75                 '下行站名':down_station_name,}
76
77         items.append(item)
78
79 def main():
80     #获取所有公交路线导航链接
81     navi_list = get_navigation()
82     print('导航链接爬取完毕')
83
84     #循环遍历导航链接列表,找到所有公交路线
85     route_list = get_route(navi_list)
86     print('公交路线爬取完毕')
87
88     # 遍历路线表,获取具体信息
89     info_list = get_info(route_list)
90     print('具体信息爬取完毕')
91
92     #爬取完毕,写入文件
93     fp = open('8684_太原公交路线.txt','w',encoding='utf8')
94     for item in items:
95         fp.write(str(item) + '\n')
96     fp.close()
97
98 if __name__ == '__main__':
99     main()

转载于:https://www.cnblogs.com/Finance-IT-gao/p/11136977.html

爬虫实例 8684公交网-太原公交线路信息相关推荐

  1. Scrapy爬虫实例——校花网

    学习爬虫有一段时间了,今天使用Scrapy框架将校花网的图片爬取到本地.Scrapy爬虫框架相对于使用requests库进行网页的爬取,拥有更高的性能. Scrapy官方定义:Scrapy是用于抓取网 ...

  2. scrapy爬虫实例:凤凰网

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  3. python爬虫爬取东方财富网股票走势+一些信息

    一.目标 我们的目标是爬取东方财富网(https://www.eastmoney.com/)的股票信息 我的目标是爬取100张股票信息图片 经过实际测试我的爬取范围为000001-000110,000 ...

  4. Python爬虫实例:爬取国内所有医院信息

    本博客仅用于技术讨论,若有侵权,联系笔者删除. 此次的目的是爬取国内医院的基本信息,并按省份存储.爬取的黄页是医院列表.以下是结果图: 一.初始化数据 初始化基本的数据,包括global变量,省份名称 ...

  5. python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法

    爬取的站点:http://beijing.8684.cn/ (1)环境配置,直接上代码: # -*- coding: utf-8 -*- import requests ##导入requests fr ...

  6. Scrapy使用——抓取赶集网北京公交信息

    转载自:http://wwwdigger.com/?p=111 关于Scrapy工作过程会在之后添加. 0.相关信息 a)首先要已经完成Scrapy的配置安装(如果没有安装,可以参考Scrapy安装过 ...

  7. 1348:【例4-9】城市公交网建设问题——Kruskal算法

    [题目描述] 有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的.现在的问题是,要修 ...

  8. 一本通1348:城市公交网建设问题

    1348:[例4-9]城市公交网建设问题 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 6959     通过数: 2828 [题目描述] 有一张城市地图,图中的 ...

  9. 信息学奥赛一本通 1348:【例4-9】城市公交网建设问题

    [题目链接] ybt 1348:[例4-9]城市公交网建设问题 输出时要求对于每条边,小的顶点写在前,大的顶点写在后. 多条边之间,第一个顶点小的排在前面.如果第一个顶点相同,则第二个顶点小的排在前面 ...

  10. python爬虫实例网易云-Python3爬虫实例之网易云音乐爬虫

    本篇文章给大家带来的内容是Python3爬虫实例之网易云音乐爬虫.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 此次的目标是爬取网易云音乐上指定歌曲所有评论并生成词云 具体步骤: ...

最新文章

  1. JS加法函数,用来得到精确的加法结果(说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果)
  2. PHP-Zend引擎剖析之词法分析(一)
  3. 015-图片文件上传
  4. python和r语言比较_Python和R语言之分析对比 - 数据分析
  5. golang-flag的问题
  6. Handlebars partials 隐藏的力量
  7. [html]说说页面中字体渲染规则是怎样的?会有哪些因素影响字体的渲染?
  8. 解决http://localhost:3000/favicon.ico 的404 问题(含案例解析)
  9. 热门话题“30岁还没结婚你会考虑将就么?”数据告诉你,网友们都如何做出抉择...
  10. iphone开发中sqlite3说明
  11. ALAsset 将资源转换为 NSData
  12. Revit API多选多重过滤
  13. python气象绘图_Python气象绘图教程特刊(一)
  14. mysql数据库关联查询慢_mysql数据库多表关联查询的慢SQL优化
  15. yii2添加自定义字段
  16. echarts 加载优化_【第1615期】React Native 图表性能优化实践
  17. win7无法打开计算机共享文件夹,win7无法共享文件夹 共享文件设置不了共享怎么办?...
  18. 2×3卡方检验prism_何时应该使用非参数检验?
  19. 阿里云盘已经正式开放(获得1T永久免费空间,25MB/s下载速度)
  20. resnet152训练_resnet152 网络结构

热门文章

  1. office 中墨迹书写工具_word2016 墨迹书写 word2016墨迹书写工具
  2. 第九届蓝桥杯国赛 调手表
  3. 【云原生】灰度发布、蓝绿发布、滚动发布、灰度发布解释
  4. java操作远端ftp文件失败
  5. 矩阵快速幂求斐波那契数列 poj3070
  6. LWN:5.16 合并窗口,第二部分!
  7. 【unity】学习之路
  8. K线形态识别—K线整理形态
  9. wampserver显示红色、橙色的解决方案
  10. ubuntu 虚拟机设置全屏