当前位置: 首页 > news >正文

如何用Python自动爬取全国30+城市地铁图数据?

   最近两天工作之余,开始涉猎python,自动爬取了全国30+城市地铁图数据,这里分享下整个爬虫过程

 

1. 数据来源


    首先分析全国各个城市地铁图的数据来源,无非就是百度或者高德,这次选择用高德作为数据来源。打开高德地铁图PC端官网 http://map.amap.com/subway/index.html?&1100,点击每个城市可以看到当前城市的地铁图,打开浏览器F12一下,可以很容易看到Ajax请求接口后,地铁图才绘制出来的。

    分析得知,xhr请求的接口数据便是我们需要的一部分数据(包含线路名称、线路名称坐标、线路轨迹、站点名称、站点定位坐标等),另一部分数据则是直接在Dom节点中(包含站点名称坐标),所以我们要爬取的数据便是Ajax接口数据 + Dom节点数据,如图所示:

    

 

 


2. 爬虫过程

了解清楚数据来源后,就开始进行python准备工作,记住万能公式 :  程序 = 『数据结构』 +『 算法』

你要做的准备工作便是本次学习后收获的知识点:

2.1 用到哪些python库:

接口请求:采用requests库;

dom解析:采用lxml库;

浏览器自动化操作:采用selenium以及chrome浏览器驱动;

json操作:采用json库

2.2 用到哪些python数据结构:

list:    存储线路列表

dict:存储线路和站点信息

string:  存储各字段信息

这里不再讲述各个依赖库的安装,有针对性学习python相关知识点,就可以愉快地编码了,运行写好的爬虫脚本,不用任何手动操作,就可得到30+城市的json格式地铁图数据文件了

 


3. 源码

https://github.com/caijinlin/python-spider (内附抓取视频)

4. 总结

编码的过程中,遇到这样一个问题,有些城市的菜单在页面的『更多』里面,加载完页面后是隐藏的,python打开浏览器模拟点击的时候,会报一个找不到该元素的错误,经过google一番,总结了两个解决方案,亲测可用

相关文章:

  • 手把手教大家编译 flowable 源码
  • 2022主流内网穿透技术分享(含NAS)
  • 常见遍历方法 for循环、forEach、map、filter、find、findIndex、some、every
  • STM32国产替代方案
  • 学js的第十七天
  • 搭建自己的云存储空间|FastDFS分布式文件系统考虑一下?
  • <哈希及模拟实现>——《C++高阶》
  • 【力扣】两数之和 II - 输入有序数组
  • 懒人方案--半天搞定一个SpringBoot单体项目
  • 【JAVA数据结构】JAVA数据结构必备知识:泛型与包装类
  • 微服务项目:尚融宝(40)(核心业务流程:申请借款额度(3))
  • 将web前端项目部署到github,在hbuilderx中部署github中的项目、对Github加速
  • Pytorch优化器全总结(二)Adadelta、RMSprop、Adam、Adamax、AdamW、NAdam、SparseAdam
  • MFI不告诉你的秘密
  • 【RocketMq 系列】RocketMq 消息重试机制、死信队列
  • [iOS]Core Data浅析一 -- 启用Core Data
  • JavaScript新鲜事·第5期
  • js
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Mybatis初体验
  • Python_OOP
  • redis学习笔记(三):列表、集合、有序集合
  • springMvc学习笔记(2)
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端性能优化--懒加载和预加载
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 应用生命周期终极 DevOps 工具包
  • 赢得Docker挑战最佳实践
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ionic异常记录
  • Prometheus VS InfluxDB
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​ssh免密码登录设置及问题总结
  • #AngularJS#$sce.trustAsResourceUrl
  • (175)FPGA门控时钟技术
  • (2)MFC+openGL单文档框架glFrame
  • (2)STM32单片机上位机
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (day6) 319. 灯泡开关
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (初研) Sentence-embedding fine-tune notebook
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (七)Knockout 创建自定义绑定
  • (十一)c52学习之旅-动态数码管
  • (循环依赖问题)学习spring的第九天
  • (一)基于IDEA的JAVA基础10
  • (转)3D模板阴影原理
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)大型网站架构演变和知识体系
  • (状压dp)uva 10817 Headmaster's Headache
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions