59

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

 5 years ago
source link: https://mp.weixin.qq.com/s/vj3BOujZncwhCkQ5ZPntpA?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

阅读本文大概需要 3 分钟。

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

3ii2MrE.jpg!web

1. 数据来源

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

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

2m6vQbz.jpg!web

YBvAnaV.jpg!web

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一番,总结了两个解决方案,亲测可用

https://github.com/caijinlin/dev-solutions/issues/14

学习不应该停留理论,动手实践并输出,方可检验你的学习成果,一起操练起来吧

爱篮球的程序猿,让成长成为一种习惯

nUFZf2q.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK