一.分析网站


url =  'http://xian.8684.cn/'

1.第二层路线xpath:

# 查找以数字开头的所有链接number_href_list = tree.xpath('//div[@class="list"][1]/a/@href')# 查找以字母开头的所有链接char_href_list = tree.xpath('//div[@class="list"][2]/a/@href')

2.准确路线xpath:

 route_list = tree.xpath('//div[@class="list clearfix"]/a/@href')


3.提取所需要爬取的内容:

3.1获取公交信息:
 bus_number = tree.xpath('//div[@class="info"]/h1/text()')[0]

3.2 获取运行时间:
run_time = tree.xpath('//ul[@class="bus-desc"]/li[1]/text()')[0]

3.3获取更新时间:
    laster_time = tree.xpath('//ul[@class="bus-desc"]/li[4]/text()')[0]

3.4获取上行总站数:
    up_total = tree.xpath('//div[@class="layout-left"]/div[4]/div/div[@class="total"]/text()')[0]或up_total = tree.xpath('//div[@class="layout-left"]/div[5]/div/div[@class="total"]/text()')[0]


3.5获取上行所有站名:
    up_route = tree.xpath('//div[@class="layout-left"]/div[5]/ol/li/a/text()')[0]或up_route = tree.xpath('//div[@class="layout-left"]/div[6]/ol/li/a/text()')[0]

3.6获取下行总站数(有的路线是个封闭的圈,不分上下行):
  down_total = tree.xpath('//div[@class="layout-left"]/div[6]/div/div[@class="total"]/text()')[0]或down_total = tree.xpath('//div[@class="layout-left"]/div[7]/div/div[@class="total"]/text()')[0]或down_total = ''

3.7获取下行所有站名(有的路线是个封闭的圈,不分上下行):
    down_route = tree.xpath('//div[@class="layout-left"]/div[7]/ol/li/a/text()')[0]或down_route = tree.xpath('//div[@class="layout-left"]/div[8]/ol/li/a/text()')[0]或down_route = ''

二.代码实现

import requests
from lxml import etree
# 列表用来保存所有公交信息
items = []
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
}# 导航页爬取(以1,2,3·······开头)
def parse_navigation():url = 'https://foshan.8684.cn/'r = requests.get(url, headers=headers)# 解析内容,获取所有的导航链接tree = etree.HTML(r.text)# 查找以数字开头的所有链接number_href_list = tree.xpath('//div[@class="bus-layer depth w120"]/div[1]/div/a/@href')# 查找以字母开头的所有链接char_href_list = tree.xpath('//div[@class="bus-layer depth w120"]/div[2]/div/a/@href')# 以列表形式返回所有链接return number_href_list + char_href_listdef parse_second_route(content):tree = etree.HTML(content)# 写xpath,获取每一个线路route_list = tree.xpath('//div[@class="list clearfix"]/a/@href')route_name = tree.xpath('//div[@class="list clearfix"]/a/text()')i = 0# 遍历上边的列表for route in route_list:print('开始爬取%s线路······' % route_name[i])route = 'https://foshan.8684.cn'+router = requests.get(url=route,headers=headers)# 解析内容,获取每一路公交车的详细信息parse_third_route(r.text)print('结束爬取%s线路······' % route_name[i])i += 1def parse_third_route(content):tree = etree.HTML(content)# -------------------依次获取内容--------------------# 获取公交信息bus_number = tree.xpath('//div[@class="info"]/h1/text()')[0]# 获取运行时间run_time = tree.xpath('//ul[@class="bus-desc"]/li[1]/text()')[0]# 获取票价信息ticket_info = tree.xpath('//ul[@class="bus-desc"]/li[2]/text()')[0]# 获取更新时间laster_time = tree.xpath('//ul[@class="bus-desc"]/li[4]/text()')[0]if tree.xpath('//div[@class="layout-left"]/div[5]/@class')[0] == 'bus-excerpt mb15':# 获取上行总站数up_total = tree.xpath('//div[@class="layout-left"]/div[5]/div/div[@class="total"]/text()')[0]# 获取上行所有站名up_route = tree.xpath('//div[@class="layout-left"]/div[6]/ol/li/a/text()')try:# 获取下行总站数down_total = tree.xpath('//div[@class="layout-left"]/div[7]/div/div[@class="total"]/text()')[0]# 获取下行所有站名down_route = tree.xpath('//div[@class="layout-left"]/div[8]/ol/li/a/text()')except Exception as e:down_total = ''down_route = ''else:up_total = tree.xpath('//div[@class="layout-left"]/div[4]/div/div[@class="total"]/text()')[0]up_route = tree.xpath('//div[@class="layout-left"]/div[5]/ol/li/a/text()')try:down_total = tree.xpath('//div[@class="layout-left"]/div[6]/div/div[@class="total"]/text()')[0]down_route = tree.xpath('//div[@class="layout-left"]/div[7]/ol/li/a/text()')except Exception as e:down_total = ''down_route = ''# 将每一条公交信息存放到字典中item = {'线路名称': bus_number,'运行时间': run_time,'票价信息': ticket_info,'更新时间': laster_time,'上行总站数': up_total,'上行所有站名': up_route,'下行总站数': down_total,'下行所有站名': down_route}items.append(item)def parse_second(navi_list):# 遍历上面的列表,依次发送请求,解析内容,获取每个页面所有的公交路线urlfor first_url in navi_list:first_url = 'https://foshan.8684.cn' + first_urlprint('开始爬取%s所有的公交信息' % first_url)r = requests.get(url=first_url, headers=headers)# 解析内容,获取每一路公交的详细urlparse_second_route(r.text)# 爬取完毕fp = open('佛山公交.txt', 'w', encoding='utf8')for item in items:fp.write(str(item) + '\n')fp.close()def main():# 爬取第一页所有的导航链接navi_list = parse_navigation()# 爬取二级页面,需要找到以1开头的所有公交路线parse_second(navi_list)if __name__ == '__main__':main()


python爬虫——requests+xpath 爬取8684公交查询网站相关推荐

  1. Python爬虫:Xpath爬取网页信息(附代码)

    Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...

  2. python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程

    python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程 前言 一丶整体思路 二丶遇到的问题 三丶分析URL 四丶解析页面 五丶写入文件 六丶完整代码 七丶最后 前言 大家好我是墨绿 头顶总 ...

  3. Python 爬虫实战入门——爬取汽车之家网站促销优惠与经销商信息

    在4S店实习,市场部经理让我写一个小程序自动爬取汽车之家网站上自家品牌的促销文章,因为区域经理需要各店上报在网站上每一家经销商文章的露出频率,于是就自己尝试写一个爬虫,正好当入门了. 一.自动爬取并输 ...

  4. python爬虫 requests+lxml爬取前程无忧网之模拟浏览器登录

    "前程无忧"(Nasdaq: JOBS) : 是国内一个集多种媒介资源优势的专业人力资源服务机构,创始人为甄荣辉.它集合了传统媒体.网络媒体及先进的信息技术,加上一支经验丰富的专业 ...

  5. python爬虫——使用xpath爬取搜狗微信文章

    缺点:爬取一定数量之后会出现验证码,导致不能继续爬取,需要更换ip才可以继续爬取,或者在浏览器重新输入验证码之后复制cookie后方能继续爬取. import requests from fake_u ...

  6. python使用requests+xpath爬取小说并下载

    这个爬虫只是选定热门小说,不支持自选搜索下载,日后会补充并改进. 选定小说网址: 笔趣阁 爬取: 需要导入的包 import requests from lxml import etree impor ...

  7. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  8. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解决方法

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  9. Python之requests+xpath爬取猫眼电影并写入数据库(图文教程)

    文章目录 一.pyhton连接mysql数据库 二.用xpath抓取有用信息 说几个比较容易掉坑的地方 一 二 三 效果 一.pyhton连接mysql数据库 我是写了一个py文件来封装一下,然后在爬 ...

最新文章

  1. python使用fpdf的multi_cell API实现长文本写入的自动换行功能实战
  2. 3.2 选择最可能的句子-深度学习第五课《序列模型》-Stanford吴恩达教授
  3. 委派模式的定义及应用场景
  4. php friso,php binding 不兼容php7
  5. 安全云盘项目(四)4.1: 云盘原型系统详细设计
  6. 保护公民信息安全 中国在行动
  7. python运行怎么下一步_简明Python3教程 18.下一步是什么
  8. ObjC学习6-分类、协议及预处理程序
  9. Spark面试术语总结
  10. python测量 检测软件_pytest首页、文档和下载 - Python 测试工具 - OSCHINA - 中文开源技术交流社区...
  11. 安装activesync同步时遇到的问题
  12. 千兆网线的制作方法和千兆网线的施工注意事项
  13. 最难忘的一节计算机课,我最难忘的一节课
  14. Ubuntu20.04 Server+Xubuntu-desktop英文环境下安装百度五笔
  15. 【解决方案】EasyCVR安防视频云服务城市污水处理厂解决方案
  16. (zzulioj1005)输入3个整数,输出它们的1次幂、2次幂和3次幂。
  17. xp获取计算机管理员权限,xp管理员权限的获取与防范
  18. 湖南师范学院大学计算机等级考试,湖南师范大学计算机等级考试时间
  19. 用Python制作一个简易的计时器
  20. 2022年电工初级电工证(五级)电工操作证试题精选及答案

热门文章

  1. setup方式父子组件传值
  2. 【论文翻译】跨异构网络学习挖掘竞争关系
  3. 2021国考计算机专业可以报财务类的岗吗,哪些专业可以报2021年国考?
  4. 彻底根除“无法安装64位版本的Office,因为在您的PC上找到了以下32位程序:”的问题
  5. python实现直播功能rtmo_基于python的直播间接口测试实战 详解结合项目
  6. ABBYY FlexiCapture 帮助韩国商人申请产品专利
  7. 武汉坚守第五十四天——胖人容易被感染,荷兰分析有数据
  8. 制作随身携带的Kali linux,将kali装入U盘
  9. 无粪便废水和含粪便物质废水用止回阀建筑材料英国UKCA认证—EN 12050-4
  10. 售后服务量太大,客服人员忙不过来,怎么办