一、数据来源
本文所涉及的市、县级经纬度数据均来自于阿里云,数据更新于2020年4月。
二、全部代码
import requests
import json
import pandas as pd
import re
def get_feature_list(url):
r = requests.get(url)
data = json.loads(r.text)
return data['features']
def get_data(city_data):
df = []
for city in city_data:
city_code = city['properties']['adcode']
city_name = city['properties']['name']
lon,lat = city['properties']['center']
df.append([city_code,city_name,lon,lat])
df = pd.DataFrame(df,columns=['城市代码','城市名称','经度','维度'])
return df
def main(url,whether): #是则爬取一级行政单位,否则爬取二级行政单位
data = get_feature_list(url)
if whether:
city_data = get_data(data)
city_data.to_csv('C:/users/dell/Desktop/city.csv',encoding='gbk',index=False)
else:
county = pd.DataFrame()
pattern = '\d+'
for city in data:
city_code = city['properties']['adcode']
url = re.sub(pattern,str(city_code),url)
county_data = get_data(get_feature_list(url))
county = pd.concat([county,county_data])
print(city['properties']['name']+'下所有区县保存完毕')
county.to_csv('C:/users/dell/Desktop/county.csv',encoding='gbk',index=False)
if __name__=='__main__':
#改变此处的url,即可获取不同地区的经纬度信息(其中,code后面对应的数字唯一对应一个地区)
url = 'https://geo.datav.aliyun.com/areas/bound/geojson?code=420000_full'
main(url,False) #True则爬取二级行政单元,False则爬取三级行政单元
三、使用介绍
以下,均以安徽省为例
3.1 获取全省所有地级市经纬度信息
打开上述数据网址,在搜索栏中输入安徽省,并复制红框处的地址,将上述代码中的url换成该地址即可。
此时,如果想要获取安徽省所有地级市的经纬度信息,则将main函数中的第二个参数设置为True,最终爬取结果如下:
3.2 获取某个地级市下所有区县经纬度信息
若想要获取合肥市下所有区县的经纬度信息,同理,在搜索栏中输入合肥市,将红框处的地址复制到代码中的url处,并设置main函数中第二个参数为True
最终,爬取结果如下:
3.3 获取全省所有区县经纬度信息
若想获取安徽省下所有区县的经纬度信息,则将安徽省所对应网址复制到url处,并设置main函数第二个参数为False即可。最终,爬取的结果如下:
以上,就是本次分享的全部内容~