就两秒?这说出去谁信啊!

news/2024/5/3 20:42:40/文章来源:https://blog.csdn.net/wzg199538/article/details/128047028

文 | xiaoyi(转载请后台联系

关注公众号:小一的学习笔记

截止发文,北上广深一共有6510条公交线路

为了获取上面的这些线路信息,我写了一个爬虫,大概用了2秒左右就搞定,真爽!

说出来你们可能不信,别着急,用代码说话1f4689be28c4e64f2693fd74346f3278.png,往下看👇

先给一个代码的使用说明,源码和逻辑见后文

>1、核心代码

首先是先获取目标城市的公交线路分类信息,需要传入的参数是城市名称

线路分类是在目标城市的首页会显示,获取起来也比较容易。此外,还需要根据线路标签构造访问的二级URL

其中,主函数代码如下:

# 获取公交线路分类信息
city = 'shenzhen'
dic_city = get_bus_list(city)

其次是通过遍历每一个类型的公交线路,获取该线路下的所有的公交路线,并构造每一条公交路线的三级URL,方便后续的信息获取

最后将多个城市的数据合并在一起,就搞定了

# 解析并获取每个线路的数据
df_per_city = get_line_info(dic_city)
df_data = df_data.append(df_per_city, ignore_index=True)

程序运行图如下:

49d803ff30f2d50059c7360b7e6429d4.png

最终爬取的数据如下:

4387543e5bfc6a5760b3df0045165aef.png

北上广深一共有6510条公交路线

>2、爬虫思路

获取源码文件请直接在后台回复 公交站点

今天的源码其实之前有写过,但是因为过去时间比较久了,没有和官方的更新同步,所以在运行过程中会出现bug

这次我也是将存在的bug修复了,并优化了部分逻辑,比以前的代码运行速度会更快,更快!

今天爬取的网站是8684网,上面有各种公交站点、地铁站点、违章、资讯等等数据,小功能做的相当不错。

页面长这样:

e109c5fb92bc725873f6a72e85dd5b4c.png

对应的我们点击热门公交中的某个城市,例如:深圳公交,注意看点击的时候网址栏发生的变化

此时的网址变成了:https://shenzhen.8684.cn/

以此类推,其他城市对应的访问链接想必你会很容易构造出来

点进去之后的页面是这样的:

902e0e516d81dfbd00151d136aab3872.png

从这几种分类类型来看,路线分类那一栏一定是最标准的,而且在后期的分析过程中一定会最有用。

直接打开F12,进行源码分析(或者在某个超链接上点击右键->检查)内容一目了然

定位到 bus-layer depth w120 的这个 div,然后定位到它的第三个 class为‘pl10’ 的子div,这个就是我们我们需要的线路分类

对应上面的网页显示内容,源码都展开之后是这样的:

6ab4e25bd3eaef1433fb85b91de04867.png

其中有两种标签:class="kt" 的span标签,对应的是分类的标题;class='list' 的div标签,子标签对应的是每一个分类的链接 href 和名称,有用的是第二个标签。

正常点击网页上的某一种分类线路,例如:常规线路,注意看点击的时候网址栏发生的变化

此时的网址变成了:https://shenzhen.8684.cn/line1,也就是在之前链接的结尾加上上面的 href 内容

再回到我们的网页上,可以看到显示的公交路线

17153a463459b95080007d91ec8e6be0.png

同样分析源码,内容如下:

3306ae5ea0092c3f39fca37869565605.png

和上面一样的处理思路,在源码中可以直接定位到该类型线路的所有公交线路的详细信息,直接采集即可

代码复现起来也比较简单,但是由于篇幅问题,这里就只展示核心的代码部分

首先是解析公交路线类型,并构造每一个类型的二级URL

# 解析公交路线类型
if '线路分类' in name:soup_a_list = soup_bus.find('div', class_='list')for soup_a in soup_a_list.find_all('a'):text = soup_a.get_text()href = soup_a.get('href')dic_result[text] = "https://{0}.8684.cn{1}".format(city, href)

其次是解析每一条公交线路,包括的字段有:线路类型、线路名称、标记、链接和城市

其中的链接是每一个公交线路的详情链接,里面有该线路的票价、开始时间、结束时间、站点信息等等

核心代码如下:

# 解析每一条公交线路
for soup_a in soup_buslist.find_all('a'):text = soup_a.get_text()href = soup_a.get('href')title = soup_a.get('title')bus_arr.append([key, title, text, "https://{0}.8684.cn{1}".format(city, href), city, '未更新'])

以上是核心源码,这里省去了非核心部分,需要请查看源码文件。

👆获取源码请在后台回复公交站点

f2010dee1b884e99d159ce186c5a5e09.gif

·················END·················

推荐阅读

•   不好意思,我真的不用花钱

•   害,5秒就搞定的事儿,我以为多复杂呢

•   是的,这三个网站,我天天用

原创不易,希望大家在看完文章的同时,记得一键三连6db4de47b46a0c5e37119023bf57a41e.png

我是小一,我们下节见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_37030.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【项目实战:核酸检测平台】第三章 利其器

第三章 利其器 摘要:俗话说的好工欲善其事,必先利其器,框架搭的好,开发起来很舒服,搭的不好,开发起来就很痛苦。 一个程序员只会写业务代码,最多算是个码农,搭框架的本事、遇到难题的解决能力…

第八章 兼容多种模块标准的软件包封装

第八章 如何封装兼容多种JS模块标准的软件包? 为了方便用户使用,一款成熟的类库都会提供多种模块封装形式,比如大家最常用到的 Vue,就提供了cjs、esm、umd 等多种封装模式,并且还会提供对应的压缩版本,方便…

微服务之间,最佳的调用方式是什么?

在微服务架构中,需要调用很多服务才能完成一项功能。服务之间如何互相调用就变成微服务架构中的一个关键问题。服务调用有两种方式,一种是RPC方式,另一种是事件驱动(Event-driven)方式,也就是发消息方式。消…

MySQL海量数据优化(理论+实战) 吊打面试官

一、准备表数据 咱们建一张用户表,表中的字段有用户ID、用户名、地址、记录创建时间,如图所示 ​OK,接下来准备写一个存储过程插入一百万条数据 CREATE TABLE t_user (id int NOT NULL,user_name varchar(32) CHARACTER SET utf8 COLLATE ut…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java线上学习系统8e88w

做毕业设计一定要选好题目。毕设想简单,其实很简单。这里给几点建议: 1:首先,学会收集整理,年年专业都一样,岁岁毕业人不同。很多人在做毕业设计的时候,都犯了一个错误,那就是不借鉴…

路由策略和路由控制

路由策略和路由控制 路由策略 针对路由的发布,接收,引入进行控制,从而影响数据的路径或者可达性 路由匹配工具 ACL:访问前缀列表 一个ACL用多条规则组成,不同规则之间通过rule id进行区分,默认rule 步…

[附源码]java毕业设计智慧农业销售平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

XSS测试绕过WAF思路

今天继续给大家介绍渗透测试相关知识,本文主要内容是XSS测试绕过WAF思路。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授权设…

【C/C++】万字图文详解C语言文件操作 完美装饰课设大作业

目标导航 写在前面 为什么使用文件? 什么是文件? 程序文件 数据文件 认识文件名 文件的打开和关闭 文件指针 文件的打开和关闭 1.以"r"(只读)的方式打开文件 2.以"w"(只写)…

178:vue+openlayers 加载多种形式Esri地图

第178个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中绘制自定义图形,利用Geojson的writeFeatures,来生成geojson格式的数据,然后使用file-saver来导出geojson。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetM…

进程的初识

目录预备知识 -> 操作系统操作系统的定义操作系统的定位进程进程的概念进程调度的过程进程的管理描述组织PCB描述进程的特征进程调度的相关属性进程的状态优先级上下文记账信息预备知识 -> 操作系统 操作系统的定义 操作系统是一个搞管理的软件 对上,要对硬…

基于android的个性闹铃的设计与开发(闹铃,日历,计时器,备忘录)

目 录 摘 要 2 Abstract 2 1 选题的背景和意义 5 1.1 选题的背景 5 1.2 国内外研究现状 5 1.2.1 国内外手机系统现状 5 1.2.2 国内外手机应用现状 7 1.2.3 发展趋势 7 2 需求分析 9 2.1 系统需求 9 2.2 需求分析 9 2.3 约束与限制 10 3 总体设计 11 3.1 系统结构图 11 3.2 总体…

网站被大量cc攻击导致打不开怎么解决

家好,今天小蚁君给大家分享一个昨天接入我们防护的客户,说下这个客户特点, 网站业务,由于源服务器是在阿里云,防护阈值很低,基本上是无防御的,随便压测一下就死,通过朋友介绍过来&am…

Packet Tracer - 排除多区域 OSPFv2 故障

地址分配表 设备 接口 IP 地址 子网掩码 默认网关 ISP GigabitEthernet0/0 209.165.200.17 255.255.255.240 不适用 ASBR GigabitEthernet0/0 209.165.200.18 255.255.255.240 不适用 Serial0/0/0 10.1.1.2 255.255.255.252 不适用 Serial0/0/1 10.2.2…

HTML+CSS+JS制作一个迅雷看看电影网页设计实例 ,排版整洁,内容丰富,主题鲜明,简单的网页制作期末作业

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

【2-Docker安装部署ElasticSearch和Kibanan详细步骤】

一.知识回顾 【0.ElasticSearch专栏在这里哟,想要学习的可自行进入专栏学习】 【1-ElasticSearch的基本介绍与用途、ElasticSearch中一些基本的概念、倒排索引的基本概念】 二.Docker安装部署ElasticSearch 2.1 docker pull 从镜像仓库中拉拉取ElasticSearch的镜像…

留学Essay写作主要靠哪些步骤得分?

期末来了,留学生该怎么办?如何做Essay?下面我们介绍提高写作能力的有效技巧! What should international students do when the end of the semester comes?How to do Essay?Here we introduce effective skills to improve your writing …

汽车零部件加工行业工业互联网智能工厂解决方案

汽车零部件分类 汽车零部件是汽车工业发展的基础。按功能分类如下: 零部件分类 主要产品 发动系统 发动机总成、滤清器、气缸及部件、油箱、曲轴、凸轮轴、气门及部件、皮带、增压器、化油器、燃油喷射装置、其他发动系统 传动系统 离合器、减速器总成、变速器…

Elasticsearch 8.4.1 配置自签名证书和启用Https

一、背景 某次安全扫描过程中,发现环境存在【SSL证书不可信】和【SSL自签名证书】漏洞;漏洞描述: 此服务的X.509证书链未由认可的证书颁发机构签名。如果远程主机是生产中的公共主机,这将取消SSL的使用,因为任何人都可…

文献学习03_GloVe: Global Vectors for Word Representation_20221124

论文信息 Subjects:《2014年自然语言处理经验方法会议论文集》(EMNLP),第1532–1543页,2014年10月25日至29日, (1)题目:GloVe: Global Vectors for Word Representation &#xff0…