【最新】python爬取全国主要城市经纬度

本文介绍如何使用Python和百度地图API批量获取中国地级市的经纬度信息,并将其保存到CSV文件中。提供了完整的代码示例及直接可用的全国城市经纬度CSV文件下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


女朋友生日快乐代码—>>>html生日快乐代码
html表白代码大全—>>>html表白代码大全

个人主页地址:皮小孩的个人主页


前言

有时候我们做项目可能需要很多地点的经纬度信息,这个时候就需要程序来批量获取了。本文通过调用百度地图API接口和python程序,批量获取经纬度信息并且写入CSV文件。

我已经生成了所有城市经纬度csv文件,大家可以直接下载:全国所有城市经纬度csv下载
在这里插入图片描述
一共三百多个,全国所有的地级市都有。

具体过程

1.申请百度API服务密钥

进入百度地图开放平台http://lbsyun.baidu.com/
登录,打开控制台,进入我的应用
创建应用
输入应用名称
如果不想对IP做任何限制,可以设置为0.0.0.0/0
在这里插入图片描述

提交后可以在我的应用找到访问密钥
在这里插入图片描述

2.python代码实现

代码如下(示例):

# -*-  coding: utf-8 -*-
import json
from urllib.request import urlopen, quote
import requests,csv
address=['沈阳','大连','长春','哈尔滨','上海','南京','杭州','宁波','合肥','福州','厦门','南昌','济南','青岛','郑州','武汉','长沙','广州','深圳','南宁','海口','重庆','成都','贵阳','昆明','拉萨','西安','兰州','西宁','银川','乌鲁木齐']
def getlnglat(address):
    url = 'http://api.map.baidu.com/geocoding/v3/'
    output = 'json'
    ak = '' #'你申请的密钥***'
    add = quote(address) #由于本文城市变量为中文,为防止乱码,先用quote进行编码
    uri = url + '?' + 'address=' + add + '&output=' + output + '&ak=' + ak
    req = urlopen(uri)
    res = req.read().decode() #将其他编码的字符串解码成unicode
    temp = json.loads(res) #对json数据进行解析
    return temp

f = open('city.csv','w',encoding='utf-8',newline='')
csv_writer = csv.writer(f)
csv_writer.writerow(["city", "lng", "lat"])
for i in address:
        lng = getlnglat(i)['result']['location']['lng'] #采用构造的函数来获取经度
        lat = getlnglat(i)['result']['location']['lat'] #获取纬度
        str_temp = [i,lng,lat]
        csv_writer.writerow(str_temp) #写入文档
f.close()

最后结果

我已经生成了所有城市经纬度csv文件,大家可以直接下载。全国所有城市经纬度csv下载
在这里插入图片描述

补充

我们可以进入百度地图API的官网http://lbsyun.baidu.com/
下滑找到Web服务API
在这里插入图片描述
找到地理编码
在这里插入图片描述
查看服务文档
在这里插入图片描述
所以对于python代码,我们可以在address数组里面添加具体地点。
在这里插入图片描述

### 回答1: Python可以通过一些库来爬取上海市地铁站的经纬度。首先需要确定爬取网站的URL,例如可以选择使用高德地图提供的API。通过Python的requests库向API发送请求,获取API返回的json格式的数据。然后使用Python的json库对返回的数据进行解析,得到站点名称、经度和纬度等信息。最后,将获取到的信息存储到本地文件,以备后续使用。 具体实现步骤如下: 1.引入requests和json库: import requests import json 2.设置API链接,将链接中的参数替换为想要获取的城市和关键词(上海和地铁站): url = 'https://restapi.amap.com/v3/place/text?keywords=地铁站&city=上海&output=json&offset=25' 3.发送请求,获取数据: response = requests.get(url) data = response.text 4.将返回的json格式数据解析为Python对象: json_data = json.loads(data) station_list = json_data['pois'] 5.遍历地铁站列表,获取名称、经度、纬度等信息: for station in station_list: name = station['name'] lon = station['location'].split(',')[0] lat = station['location'].split(',')[1] 6.将数据存储到本地文件: with open('stations.csv', 'w') as f: for station in station_list: name = station['name'] lon = station['location'].split(',')[0] lat = station['location'].split(',')[1] f.write(name + ',' + lon + ',' + lat + '\n') 以上就是使用Python爬取上海市地铁站经纬度的基本步骤。通过这种方法可以快速获取地铁站数据,为后续的分析、可视化等工作提供支持。 ### 回答2: 爬取上海市地铁站经纬度,需要使用 Python 程序进行爬取。具体步骤如下: 1. 导入必要的库:在 Python 程序中,需要导入 requests、json 和 BeautifulSoup 库。 2. 分析网页源代码:打开上海轨道交通网站(https://service.shmetro.com/skin/js/pca.js),查看源代码,可以发现地铁站经纬度信息储存在一个 JavaScript 变量中。 3. 解析 JavaScript 变量:使用 re 库正则表达式的方式解析出 JavaScript 变量的值,再使用 json 库将其转换成 Python 字典进行操作。 4. 提取地铁站经纬度信息:从字典中提取出有用的地铁站经纬度信息。 5. 数据存储:使用 pandas 库将数据储存在 csv 文件中,更方便地进行分析和可视化。 具体实现代码可参考以下步骤: ``` python import requests import re import json import pandas as pd from bs4 import BeautifulSoup # 1. 定义要爬取的网址 url = "https://service.shmetro.com/skin/js/pca.js" # 2. 发送请求并获取网页源代码 r = requests.get(url) r.encoding = "utf-8" html = r.text # 3. 使用正则表达式解析 JavaScript 变量 pattern = r"var stationjson = ([\S\s]*?);" data = json.loads(re.search(pattern, html).group(1)) # 4. 提取地铁站经纬度信息 stations = data["s"] station_list = [] for line in stations: for station in line["st"]: name = station["n"] lng = station["sl"] lat = station["lt"] station_list.append([name, lng, lat]) # 5. 数据存储 df = pd.DataFrame(station_list, columns=["站名", "经度", "纬度"]) df.to_csv("shanghai_subway_stations.csv", encoding="utf_8_sig", index=None) ``` 通过以上代码,我们可以成功地爬取上海市地铁站经纬度信息,并将其保存在 csv 文件中,方便进行数据分析和可视化。
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮小孩ls

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值