教你轻松爬取全国40城5000+地铁站点数据!(附源码)
大家好,我是 辰哥~
今天介绍一种新的 获取城市地铁站点数据的方法,而且不再只是北上广深四个城市,而是 全国开通地铁的城市。
对了,你觉得全国有多少个城市开通了地铁?
文末附源码
▶正文
今天爬取数据的链接是:http://map.amap.com/subway/index.html
这个是高德地图对于全国地铁站点的一个可视化界面,做的相当不错。
页面长这样:
既然是可视化那肯定有数据支撑,要不就是 有数据接口 要不就是 直接显示在页面上
巧的是,它两个都有!
首先,浏览器打开 F12,定位到上方的城市列表,如图:
对应的城市列表是直接显示在 div 标签里面的,不过城市是被分成了两部分,一部分在 city-list 里面,一部分在 more-city-list 里面。
而且在每一个城市的 a 标签里面有对应的城市 ID 和城市拼音。
随便点击一个城市,在可视化界面发生变化的同时看到 Network 中出现了一个链接。如图:
链接名称中包含了这个城市的 ID 和拼音,对应的数据就是我们要的地铁站点数据。
不过显然这个数据需要往下稍微深入一点才能发现:
但是既然有了接口,那获取数据也就很简单的事情
总结一下流程,思路如下:
爬取两个 div 中的城市数据(包括 ID 和拼音),生成城市集合
遍历城市集合,构造每一个城市的 url
访问 url,爬取对应城市的地铁站点数据
对了,最后还能加一步:通过地铁站点名去查询其对应所在的城市行政区。例如:深圳市翻身地铁站属于宝安区
实现起来比较简单,代码大致如下:
▶获取城市列表
url = 'http://map.amap.com/subway/index.html'
res = requests.get(url, headers={'User-Agent': get_ua()})
res.encoding = res.apparent_encoding
soup = BeautifulSoup(res.text, 'html.parser')name_dict = []
# 获取显示出的城市列表
for soup_a in soup.find('div', class_='city-list fl').find_all('a'):city_name_py = soup_a['cityname']city_id = soup_a['id']city_name_ch = soup_a.get_text()name_dict.append({'name_py': city_name_py, 'id': city_id, 'name_ch': city_name_ch})
# 获取未显示出来的城市列表
for soup_a in soup.find('div', class_='more-city-list').find_all('a'):city_name_py = soup_a['cityname']city_id = soup_a['id']city_name_ch = soup_a.get_text()name_dict.append({'name_py': city_name_py, 'id': city_id, 'name_ch': city_name_ch})df_name = pd.DataFrame(name_dict)
一共 有 40 个城市,解析拿到每个城市对应的 ID 和拼音
然后,对每个城市的 url 构造如下:
# 构造每个城市的url
url = "http://map.amap.com/service/subway?_1818387860087&srhdata=" + id + '_drw_' + cityname + '.json'
▶解析城市地铁站点
从 json 中可以很方便的解析每个城市的地铁站点数据
例如:站点所属的地铁线路、站点经纬度等
核心解析代码如下:
# 核心代码
df_per_zd = df_per_zd[['n', 'sl', 'poiid', 'sp']]
df_per_zd['gd经度'] = df_per_zd['sl'].apply(lambda x: x.split(',')[0])
df_per_zd['gd纬度'] = df_per_zd['sl'].apply(lambda x: x.split(',')[1])
df_per_zd.drop('sl', axis=1, inplace=True)
df_per_zd['路线名称'] = data_line['ln']
df_per_zd['城市名称'] = name
代码的运行界面如下:
最终一共是 5001 条数据,对应的全国 40 个开通地铁的城市。
部分数据截图如下:
再通过热力图简单看一下这些城市的分布情况:
数据已经有了,抽样验证了一下,发现只有少数站点的区域不对,手动处理一下就行。
爬到的数据已经确认无误,接下来就是如何分析的问题了,下节分析部分会详细介绍。
以上就是爬虫部分的全部内容
感兴趣的同学可以去练练手
本文仅供读者学习使用,不做其他用途!
后台回复:211102,即可领取本文的全部代码
往期文章
输出好看的表格,就用这个 Python 库!
用Python+可视化工具制作漂亮地图
手把手教你用Python爬取某网小说数据,并进行可视化分析
教你轻松爬取全国40城5000+地铁站点数据!(附源码)相关推荐
- 小一教你轻松爬取全国40城5000+地铁站点数据!附源码和数据集
大家好,我是小一 上一篇文章讲了一个失败的数据分析案例,导致失败最最主要的原因就两个字:数据 有时候,爬虫爬到的数据是很珍贵.很稀缺,但是在实际项目最好还是多点谨慎,保证万无一失. 今天介绍一种新的 ...
- 爬虫实战—轻松爬取全国40城5000+地铁站点数据!附源码和数据集
原文链接:小一教你轻松爬取全国40城5000+地铁站点数据!附源码和数据集 大家好,我是小一 上一篇文章讲了一个失败的数据分析案例,导致失败最最主要的原因就两个字:数据 有时候,爬虫爬到的数据是很珍贵 ...
- 全国 40城 5000+ 地铁站点数据分析实战——这盛世如您所愿!
公众号后台回复"图书",了解更多号主新书内容 作者:xiaoyi 来源:小一的学习笔记 这盛世如您所愿 大家好,我是小一 今天这篇文章,是在前两篇文章的基础上进行的后续分析,也算是 ...
- python3网络爬虫--爬取b站用户投稿视频信息(附源码)
文章目录 一.准备工作 1.工具 二.思路 1.整体思路 2.爬虫思路 三.分析网页 1.分析数据加载方式 2.分词接口url 3.分析用户名(mid) 四.撰写爬虫 五.得到数据 六.总结 上次写了 ...
- python3APP爬虫--爬取王者荣耀小姐姐cosplay照片(附源码)
文章目录 一.絮叨 1.接上 2.启下 二.代码 三.查看数据 四.总结 一.絮叨 1.接上 自己挖的坑,自己填.上一篇python3APP爬虫–爬取王者荣耀英雄图片(附源码)爬取了王者荣耀英雄图片, ...
- python3爬取墨迹天气并发送给微信好友,附源码
需求: 1. 爬取墨迹天气的信息,包括温湿度.风速.紫外线.限号情况,生活tips等信息 2. 输入需要查询的城市,自动爬取相应信息 3. 链接微信,发送给指定好友 思路比较清晰,主要分两块,一是爬虫 ...
- pyspider实战:爬取想要的妹纸图(附源码)
pyspider基本使用 爬取网页:https://www.99tu.com/sjbz/meinv/的妹纸图片及其标题 网页介绍 "久久图库是一个崭新而夺目的图片视觉冲击平台.汇聚全球最 ...
- Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...
- python3网络爬虫--爬取b站视频评论用户信息(附源码)
文章目录 一.准备工作 1.工具 二.思路 1.整体思路 2.爬虫思路 三.分析网页 1.分析网页加载方式 2.分析数据接口 3.获取oid 四.撰写爬虫 五.存储数据 六.总结 你爱我,我爱你,蜜雪 ...
最新文章
- librosa.stft() 短时傅里叶变换
- 使用 js替换网页中的关键词为链接
- 近世代数--群同构--第三同构定理
- 对学校的希望和寄语_南中医举行2020年开学典礼,校长胡刚寄语“后浪”:乘风破浪,扬帆起航...
- 类 workbooks 的 open 方法无效_第十九章 Cach 命令大全 OPEN 命令
- fabric usage
- OpenCV颜色空间——HLS颜色空间
- 返利网拼团小程序,10人拼团7人返利
- html制作动态3d图片,如何制作3D动态图片?
- 使用协成将异步转同步
- GitChat·Python | 零基础小白如何入门 Python 编程
- java9推迟_甲骨文宣布Java 9将会推迟到明年7月发布
- 产品经理与工程师的换位思考
- V4L2框架-视频流的停止(VIDIOC_STREAMOFF)
- 微信开发 (四) 微信网页授权
- iOS 几种常用的 crash log 崩溃信息调试方法. (转载)
- 如何用Navicat连接mongoDB
- 单个数码管动态显示(STM32F103C8T6)
- 台灯显色指数多少比较好?2022双十一显色90以上的台灯推荐
- [Hexo]Hexo+github搭建静态博客
热门文章
- 群晖上NVMe实测兼容机型
- Clamav杀毒软件安装与使用
- 深度学习“三巨头”、图灵奖得主 Yann LeCun:我没有天赋,所以才追随聪明人
- ArcGIS:要素标注时报错:未找到要素,无法验证表达式
- 淘宝的消息中间件(2013)
- curl批量调用linux,shell的简单批量curl接口脚本
- Vue设置token拦截/加上Authorization请求头
- html 时间戳转换年月日,时间戳与日期的转换方法
- Android开发中常见的设计模式深入浅出——观察者模式Observer
- Photoshop入门与进阶实例:1.10 历史记录功能