利用Python爬取高德地图全国地铁站点信息

利用Python中的requests库进行地铁站点信息的获取,同时将数据保存在本机excel中

# 首先引入所需要的包
import requests
from bs4 import BeautifulSoup
import pandas as pd
import json# 发送 GET 请求获取网页内容
url = 'http://map.amap.com/subway/index.html'
response = requests.get(url)
# 第一步:爬取两个 div 中的城市数据(包括 ID 和拼音),生成城市集合
if response.status_code == 200:# 解码response_content = response.content.decode('utf-8')# 使用 Beautiful Soup 解析网页内容soup = BeautifulSoup(response_content, 'html.parser')# 从这里开始,你可以使用 Beautiful Soup 对象(soup)来提取所需的信息# 例如,查找标题title = soup.title# 通过Beautiful Soup来找到城市信息元素,并提取这个元素的信息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()city_info_list.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()city_info_list.append({'name_py': city_name_py, 'id': city_id, 'name_ch': city_name_ch})print(city_info_list)
else:print("无法获取网页内容")for city_info in city_info_list:city_id = city_info.get("id")city_name = city_info.get("name_py")city_name_ch = city_info.get("name_ch")print("开始爬取城市" + city_name_ch + "的数据")city_lines_list = []# 第二步:遍历城市集合,构造每一个城市的 url,并下载数据# 构造每个城市的urlurl = "http://map.amap.com/service/subway?_1717380520536&srhdata=" + city_id + '_drw_' + city_name + '.json'res = requests.get(url)content = res.content.decode('utf-8')# 将内容字符串转换成json对象content_json = json.loads(content)# 提取该城市的所有地铁线listline_info_list = content_json.get("l")# 第三步:开始处理每一个地铁线,提取内容到dataframe中for line_info in line_info_list:# 地铁线名字line_name = line_info["kn"]# 处理地铁线站点df_per_zd = pd.DataFrame(line_info["st"])df_per_zd = df_per_zd[['n', 'sl', 'poiid', 'sp', 't', 'su', 'sid']]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['路线名称'] = line_info['ln']df_per_zd['城市名称'] = city_name_chdf_per_zd.rename(columns={"n": "站点名称", "poiid": "POI编号", "sp": "拼音名称", "t": "换乘标志 1:换乘,0:不可换乘", "su": "su", "sid": "sid编号"}, inplace=True)# 先将这条地铁线处理过的dataframe存起来,我们后面给他放到一张表里city_lines_list.append(df_per_zd)# 这段代码就是将地铁线数据列表聚合到一张表里,形成每个城市的地铁站数据city_subway_data = pd.concat(city_lines_list, ignore_index=True)# 第四步:将处理好的文件保存为xlsxcity_subway_data.to_excel(city_name_ch + '.xlsx', sheet_name='Sheet1')

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

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

相关文章

【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《数据结构与算法:初学者入门指南》📘&am…

ospf虚链路实验简述

1、ospf虚链路实验简述 ospf虚链路配置 为解决普通区域不在骨干区域旁,通过配置Vlink-peer实现不同区域网络设备之间建立逻辑上的连接。 实验拓扑图 r1: sys sysname r1 undo info enable int loopb 0 ip add 1.1.1.1 32 ip add 200.200.200.200 32 quit int e0/0/…

模拟实现std::string类(包含完整、分文件程序)

std库中的string是一个类,对string的模拟实现,既可以复习类的特性,也可以加深对std::string的理解。 🌈一、搭建框架 ☀️1.新命名空间 本质上string是一个储存在库std里面的类,现在需要模拟实现一个string类&#…

python基础——入门必备知识

📝前言: 本文为专栏python入门基础的第一篇,主要带大家先初步学习一下python中的一些基本知识,认识,了解一下python中的一些专有名词,为日后的学习打下良好的基础,。本文主要讲解以下的python中的基本语法&…

力扣706:设计哈希映射

题目: 不使用任何内建的哈希表库设计一个哈希映射(HashMap)。 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中&#x…

tcpdump使用pcap-filter抓Vxlan包内数据

目录 1. 背景2. 参考3. 概念4. 环境5. 用法5.1 抓vxlan通讯中的icmp包5.2 tcpdump抓包命令解析5.2.1 tcpdump命令说明5.2.2 Vxlan协议报文解析 5.3 其他抓包例子5.3.1 抓包示例15.3.2 抓包示例2 1. 背景 看vxlan协议时,发现可以使用tcpdump高级用法(pca…

Unity Samples和帧动画的问题

拖动序列帧图片和自己创建clip的帧率不同 我今天在创建帧动画的时候用了两种方式第一种是直接拖动序列帧图片到Hierachy,然后生成的第二种是这样我发现两者播放的动画速率不一样最后查了半天查不到原因。最后发现是Samples的原因,而且Unity把Samples这个…

智能控制:物联网智能插座对接文档

介绍 一开始买的某米的插座,但是好像接口不开放,所以找到了这个插座,然后自己开发了下,用接口控制插座开关。wifi的连接方式,通电后一般几秒后就会连接上wifi,这个时候通过接口发送命令给他。 产品图片 通…

b站小土堆pytorch学习记录—— P25-P26 网络模型的使用和修改、保存和读取

文章目录 一、修改1.方法2.代码 二、保存和读取1.方法2.代码(1)保存(2)加载 3.陷阱 一、修改 1.方法 add_module(name: str, module: Module) -> None name 是要添加的子模块的名称。 module 是要添加的子模块。 调用 add_m…

Android车载开发之AAOS快速入门

一、概述 在正式介绍Android Automotive OS之前,我们先弄清两个概念:Android Auto和Android Automotive OS。 Android Auto Android Auto 不是操作系统,而是一个应用或一个服务。当 Android 手机通过无线或有线方式连接到汽车时,Android 系统会将使用 Android Auto 服务…

python爬虫(一)

一、python中的NumPy模块(数据的存储和处理) 这里是下载完成之后的表现 (1)创建数组 1、使用array()函数创建数组 使用array函数可以创建任意维度的的数组 下面是一个创建二维数组的代码示例 下面是代码…

每日五道java面试题之springMVC篇(一)

目录: 第一题. 什么是Spring MVC?简单介绍下你对Spring MVC的理解?第二题. Spring MVC的优点第三题. Spring MVC的主要组件?第四题. 什么是DispatcherServlet?第五题. 什么是Spring MVC框架的控制器? 第一题. 什么是S…

unity学习(49)——服务器三次注册限制以及数据库化角色信息4--角色信息数据库化

1.此处下断开始调试,list函数内就有问题: 2. 现在的问题是只读不写!32行就是写入部分的代码: 3. 很奇怪,调试的时候确实是写进来了 程序正常执行后,文件中数据也没有消失 关闭服务器文件内容依旧正常。 players包含所…

安装sqlserver2022最新版只能使用.\SQLEXPRESS登录数据库怎么修改成.

.\SQLEXPRESS “服务器名称 localhost\SQLEXPRESS”中的 “SQLEXPRESS”就是数据库的实例名称/数据库名/服务器名, “localhost”即登录本计算机安装的数据库 安装sqlserver2022最新版只能使用.\SQLEXPRESS登录数据库怎么修改成. 2、查看SQL Server数据库的实例名…

Python从0到100(二):Python语言介绍及第一个Pyhon程序

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

导数与微分错题本

《1800》 1 缺乏构造函数的技巧 2 3 等价无穷小+构造函数 4

请说明Vue中的Error Boundaries

当我们开发基于Vue框架的应用时,我们经常会遇到各种错误处理的情况。Vue提供了一种非常强大且简单的方式来处理这些错误,那就是Error Boundaries(错误边界)。本文将从概念、用法和示例代码三个方面来详细介绍Vue中的Error Boundar…

SSD LDPC软错误探测方案解读

上一篇文档中,基于SSD LDPC(Low-Density Parity-Check Codes)原理背景和纠错能力作了简单的介绍。 扩展阅读: 关于SSD LDPC纠错能力的基础探究 浅析LDPC软解码对SSD延迟的影响 本篇结合SMI发布的研究成果,通过SSD控制内部LDPC更底层的架构,来解读如何增强软错误探测能力…

mitmproxy代理

文章目录 mitmproxy1. 网络代理2. 安装3. Https请求3.1 启动mitmproxy3.2 获取证书3.3 配置代理3.4 运行测试 4. 请求4.1 读取请求4.2 修改请求4.3 拦截请求 5. 响应5.1 读取响应5.2 修改响应 6. 案例:共享账号6.1 登录bilibili获取cookies6.2 在代理请求中设置cook…

Spring揭秘:BeanDefinitionRegistry应用场景及实现原理!

内容概要 BeanDefinitionRegistry接口提供了灵活且强大的Bean定义管理能力,通过该接口,开发者可以动态地注册、检索和移除Bean定义,使得Spring容器在应对复杂应用场景时更加游刃有余,增强了Spring容器的可扩展性和动态性&#xf…