原文链接:小一教你轻松爬取全国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?_1618387860087&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 个开通地铁的城市。

部分数据截图如下:

再通过热力图简单看一下这些城市的分布情况:

数据已经有了,抽样验证了一下,发现只有少数站点的区域不对,手动处理一下就行。

爬到的数据已经确认无误,接下来就是如何分析的问题了,下节分析部分会详细介绍。

ok,以上就是全部内容,感兴趣的同学可以去练练手,原文链接中 可免费获取数据集和源码

▶原文链接:小一教你轻松爬取全国40城5000+地铁站点数据!附源码和数据集

作者:xiaoyi
文章首发:公众号【小一的学习笔记】
未经允许禁止转载,需要转载请微信联系授权(微信号:zhiqiuxiaoyi)

爬虫实战—轻松爬取全国40城5000+地铁站点数据!附源码和数据集相关推荐

  1. 小一教你轻松爬取全国40城5000+地铁站点数据!附源码和数据集

    大家好,我是小一 上一篇文章讲了一个失败的数据分析案例,导致失败最最主要的原因就两个字:数据 有时候,爬虫爬到的数据是很珍贵.很稀缺,但是在实际项目最好还是多点谨慎,保证万无一失. 今天介绍一种新的 ...

  2. 教你轻松爬取全国40城5000+地铁站点数据!(附源码)

    大家好,我是 辰哥~ 今天介绍一种新的 获取城市地铁站点数据的方法,而且不再只是北上广深四个城市,而是 全国开通地铁的城市. 对了,你觉得全国有多少个城市开通了地铁? 文末附源码 ▶正文 今天爬取数据 ...

  3. 全国 40城 5000+ 地铁站点数据分析实战——这盛世如您所愿!

    公众号后台回复"图书",了解更多号主新书内容 作者:xiaoyi 来源:小一的学习笔记 这盛世如您所愿 大家好,我是小一 今天这篇文章,是在前两篇文章的基础上进行的后续分析,也算是 ...

  4. Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)

    在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...

  5. pyspider实战:爬取想要的妹纸图(附源码)

    pyspider基本使用 爬取网页:https://www.99tu.com/sjbz/meinv/的妹纸图片及其标题 网页介绍 ​ "久久图库是一个崭新而夺目的图片视觉冲击平台.汇聚全球最 ...

  6. python3网络爬虫--爬取b站用户投稿视频信息(附源码)

    文章目录 一.准备工作 1.工具 二.思路 1.整体思路 2.爬虫思路 三.分析网页 1.分析数据加载方式 2.分词接口url 3.分析用户名(mid) 四.撰写爬虫 五.得到数据 六.总结 上次写了 ...

  7. Python爬虫实战之 爬取全国理工类大学数量+数据可视化

    上次爬取高考分数线这部分收了个尾,今天咱们来全面爬取全国各省有多少所理工类大学,并简单实现一个数据可视化.话不多说,咱们开始吧. 第一步,拿到url地址 第二步,获取高校数据 第三步,地图可视化 第四 ...

  8. python3APP爬虫--爬取王者荣耀小姐姐cosplay照片(附源码)

    文章目录 一.絮叨 1.接上 2.启下 二.代码 三.查看数据 四.总结 一.絮叨 1.接上 自己挖的坑,自己填.上一篇python3APP爬虫–爬取王者荣耀英雄图片(附源码)爬取了王者荣耀英雄图片, ...

  9. python3网络爬虫--爬取b站视频评论用户信息(附源码)

    文章目录 一.准备工作 1.工具 二.思路 1.整体思路 2.爬虫思路 三.分析网页 1.分析网页加载方式 2.分析数据接口 3.获取oid 四.撰写爬虫 五.存储数据 六.总结 你爱我,我爱你,蜜雪 ...

最新文章

  1. JS设计模式-观察者模式
  2. 袁国勇院士团队纳米孔测序揭示人和禽流感病毒新型检测和监测靶点
  3. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.6. 布尔类型
  4. android opengl es 绘制余弦曲线,Android OpenGL ES - 绘制线、面
  5. 科大星云诗社动态20210818
  6. [导入]ASP.NET MVC框架开发系列课程(2):一个简单的ASP.NET MVC应用程序.zip(13.70 MB)...
  7. 洛谷回文数c语言,【普及-】洛谷P1015:回文数 一种解法
  8. python+opencv简单人脸识别(源码)(有手就行)
  9. 骇基-黑客攻防实战入门⑴
  10. Unity简单操作:Unity资源商店 Asset store下载文件夹的位置
  11. mysql数据库在哪里写语句_MySQL数据库基本操作以及SQL语句
  12. Latex角标 左侧角标 左上角角标 左下角角标
  13. 永别了.武器------爱好和平人民的美好愿望(图)
  14. JAVA-----集合子接口Queue及其子接口Deque
  15. 学习笔记 #pragma GCC diagnostic push 与 #pragma GCC diagnostic pop 的使用
  16. hapi mysql项目实战路由初始化_hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)...
  17. 14.Java- Spring
  18. PowerDesigner中pdm设置1:n,1:1,n:n的对应关系
  19. TCP 漕河泾算法(tcp_caohejing)
  20. SpringCloud系列之Eureka服务注册及发现

热门文章

  1. GNU和GPL的区别
  2. win10钉钉机器人自动发消息(定时器自动执行脚本)
  3. python的标志为什么是蛇_Guido给Python语言起名的原因是他家有只宠物蛇
  4. 【软件安装】Win11安装SolidWorks2018 跳过注册机error6报错
  5. 8分钟答辩稿_8分钟的发言稿多少字
  6. 创新设计思维:从客户角度考虑的九个特点
  7. 用Java修改Window或者Linux下的hosts文件
  8. Google 面临来自欧盟和美国的新的隐私纠察
  9. Apple第一款家用计算机,这可真是个古董:苹果第一代Mac深度拆解
  10. 2020年有寓意的领证日期_2020年,这些日期去领证含有特殊的寓意