from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all" # 代码块显示所有执行结果

引言  

这里通过循环爬取阿里云省级地图,并处理交叉点,再通过对行政区域代码递归,爬取市级地图,县级地图。最后爬取民政部南海九段线数据。每 次爬去后都保存json格式文件。对于4个直辖市这种,省级和市级都是相同的名字和行政区域代码。对于港澳台这种,省级、市级、县级的名称和行政区 域代码都相同。这样便于筛选和绘图。

1 需要的包


import geopandas as gpd
import pandas as pd
import numpy as np
import requests
import matplotlib.pyplot as plt
import os
import json
from json import JSONDecodeError
from shapely.geometry import MultiLineString

2 省级地图 

2.1 爬数据


China_sheng = (gpd.read_file('https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json', crs='EPSG:4326').query("name != ''") # 移除南海九段线,这个数据是polygon, 不是linestring.reindex(['adcode', 'name', 'geometry'], axis=1).explode(ignore_index=True, index_parts=False) # 拆分.groupby(by=['adcode', 'name'])['geometry'] # 分组后buffer(0)以消除交叉点.agg(lambda x: x.buffer(0).unary_union) # 再合并.reset_index().set_crs(crs='EPSG:4326'))
China_sheng.head()

China_sheng.to_crs(crs='EPSG:2381').plot(column='name', figsize=(10, 15));

2.2 保存到文件

China_sheng.to_file('./ChinaMap/阿里云省级.json')

3 市级地图 

3.1 爬数据

%%time
code_sheng = (China_sheng.reindex(['adcode', 'name'], axis=1).query("~name.str.contains('台湾|香港|澳门|北京|上海|重庆|天津')", engine='python')# 排除7个特别行政区)
def get_shi_of_sheng(adcode):
return (gpd.read_file('https://geo.datav.aliyun.com/areas_v3/bound/' + str(adcode) + '_full.json', crs='EPSG:4326').explode(ignore_index=True, index_parts=False) # 拆分.groupby(by=['adcode', 'name'])['geometry'] # 分组后buffer(0)以消除交叉点.agg(lambda x: x.buffer(0).unary_union) # 再合并.reset_index().set_crs(crs='EPSG:4326'))
China_shi = []
for code in code_sheng['adcode'].values:sheng_gdf = get_shi_of_sheng(code)sheng_gdf['code_sh'] = codeChina_shi.append(sheng_gdf)
China_shi = (pd.concat(China_shi, ignore_index=True).set_index('code_sh').join(code_sheng.rename({'adcode': 'code_sh', 'name': 'name_sh'}, axis=1).set_index('code_sh'), how='left').reset_index().reindex(['geometry', 'adcode', 'name', 'code_sh', 'name_sh'], axis=1))
China_shi = (China_sheng.reindex(['geometry', 'adcode', 'name'], axis=1).query("name.str.contains('台湾|香港|澳门|北京|上海|重庆|天津')").eval("code_sh = adcode").eval("name_sh = name").append(China_shi, ignore_index=True))
China_shi.head()

China_shi.to_crs(crs='EPSG:2381').plot(column='name', figsize=(10, 15));

3.2 保存到文件

China_shi.to_file('./ChinaMap/阿里云市级.json')

4 县级地图

4.1 爬数据

%%time
code_shi = (China_shi[['adcode', 'name', 'code_sh', 'name_sh']].query("~name_sh.str.contains('台湾|香港|澳门')", engine='python')# 排除3个特别行政区)
def get_xian_of_shi(adcode):
try:data_json = requests.get('https://geo.datav.aliyun.com/areas_v3/bound/' + str(adcode) + '_full.json').json()
except JSONDecodeError:data_json = requests.get('https://geo.datav.aliyun.com/areas_v3/bound/' + str(adcode) + '.json').json()
return (gpd.GeoDataFrame.from_features(data_json, crs='EPSG:4326').explode(ignore_index=True, index_parts=False) # 拆分.groupby(by=['adcode', 'name'])['geometry'] # 分组后buffer(0)以消除交叉点.agg(lambda x: x.buffer(0).unary_union) # 再合并.reset_index().set_crs(crs='EPSG:4326'))
China_xian = []
for code in code_shi['adcode'].values:shi_gdf = get_xian_of_shi(code)[['geometry', 'adcode', 'name']]shi_gdf['code_s'] = codeChina_xian.append(shi_gdf)
China_xian = (pd.concat(China_xian, ignore_index=True).set_index('code_s').join(code_shi.rename({'adcode': 'code_s', 'name': 'name_s'}, axis=1).set_index('code_s'), how='left').reset_index().reindex(['geometry', 'adcode', 'name', 'code_sh', 'name_sh', 'code_s', 'name_s'], axis=1))
China_xian = (China_shi.query("name_sh.str.contains('台湾|香港|澳门')", engine='python').eval("code_s = adcode").eval("name_s = name").append(China_xian, ignore_index=True))
China_xian.head()

China_xian.to_crs(crs='EPSG:2381').plot(column='name', figsize=(15, 23));

4.2 保存到文件

China_xian.to_file('./ChinaMap/阿里云县级.json')

5 南海九段线 

阿里云的南海九段线数据是polygon对象,如果想要linestring, 可以从民政部爬取

nine_lines = (gpd.read_file('http://xzqh.mca.gov.cn/data/quanguo_Line.geojson', crs='EPSG:4326').query("QUHUADAIMA == 'guojiexian'").reset_index(drop=True).iloc[:14, :].geometry)
nine_lines = gpd.GeoSeries([MultiLineString(nine_lines.values)], crs=nine_lines.crs)
nine_lines.plot();

nine_lines.to_file('./ChinaMap/南海九段线.json')

地图数据来源:

阿里云(高德地图)中国地图 (http://datav.aliyun.com/portal/school/atlas/area_selector#&lat=40.1452892956766&lng=86.11083984375&zoom=5) 中国民政部中国地图 (http://xzqh.mca.gov.cn/map), 需要自己爬取。中国民政部全国行政区域代码 (http://www.mca.gov.cn/article/sj/xzqh/2020/), 需要爬取和后处理。

Python-阿里云地图的爬取相关推荐

  1. python调用百度地图API爬取西安市POI数据

    任务前提 做该项目之前,首先得有基础知识: 编程语言:python 编译工具:PyCharm 网络爬虫相关知识,xpath库,numpy,pandas等库. 任务准备: 去百度地图开放平台申请密匙:h ...

  2. Python豆瓣电影评论的爬取及词云显示

    Python豆瓣电影评论的爬取及词云显示 课程设计论文链接 前言 开发工具.核心库 系统相关技术介绍 系统分析与设计 系统功能模块组成 实现功能和目标 爬取模块设计 爬取过程中下一页的处理 窗口界面设 ...

  3. 数据采集与存储案例——基于Python爬虫框架Scrapy的爬取网络数据与MySQL数据持久化

    此案例需要预先安装pymsql python3.7.4 scrapy2.7.1 一.安装scrapy框架 1.使用pip命令安装scrapy pip install scrapy 在这里下载太慢可以使 ...

  4. 基于python的微博热搜爬取及数据分析

    刚学python爬虫,用爬虫爬取新浪微博热搜,看看效果如何,也是对这段时间学习python的总结. 一.目的: 抓取新浪微博2020年1月3日星期五的热搜榜,将抓取到的数据进行动态展示,并生成当天的微 ...

  5. Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题

      比如我们今天的案例,豆瓣电影分类页面.根本没有什么翻页,需要点击"加载更多"新的电影信息,前面的黑科技瞬间被秒--   又比如知乎关注的人列表页面:   我复制了其中两个人昵称 ...

  6. 基于Python的拉勾网Python工程师招聘信息的爬取和处理分析

    目录 一.项目简介 1.项目完成的功能 2.项目完成的特色 3.项目采用的技术栈 二.项目的需求分析 1.项目的功能需求分析 2.项目的非功能需求分析 系统性能需求 系统观感需求(界面需求) 三.项目 ...

  7. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  8. python爬虫对炒股有没有用_使用python爬虫实现网络股票信息爬取的demo

    实例如下所示: import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url ...

  9. Python 3.6模拟输入并爬取百度前10页密切相关链接

    1.安装扩展库mechanicalsoup,这个库依赖requests.beautifulsoup4等模块,一般会自动安装,如果失败的话,可以先安装依赖的其他扩展库. 2.分析百度网页源代码,找到用来 ...

最新文章

  1. 2021第一融!第四范式完成D轮7亿美元融资
  2. linux--vi 和vim 的区别
  3. 图:DFS(深度优先搜索)图解分析代码实现
  4. coreData数据操作
  5. 深入理解Magento – 第七章 – 自定义Magento系统配置
  6. js 跳转到 百度指定地址定位点
  7. 大专计算机应用基础课件,11春大专《计算机应用基础》练习课件.doc
  8. 限制只允许某个进程调用库
  9. CSS规范(OOCSS SMACSS BEM)
  10. 记录HttpWebRequest辅助类
  11. NOIP2016DAY1题解
  12. 视频教程-大学数学实验(MATLAB版)-其他
  13. 常用单词3000 php,常用英语单词大全,英语最常用单词3000个。
  14. 4D-Net for Learned Multi-Modal Alignment 论文笔记
  15. html标签img是什么意思,html中img标签属性是什么意思
  16. 读研究生应该做什么?导师会帮你什么?
  17. 爬取猫眼评分前100的电影
  18. ajax nginx 转发 sessionid_百度、京东、网易、腾讯、淘宝等大厂都在用的Web服务器Nginx详解
  19. 中国56个民族拼音表
  20. vue3 图片懒加载的实现

热门文章

  1. 流?I/O操作?阻塞?epoll?
  2. optuna-自动化调参利器
  3. 华为cor—al10_华为荣耀cor_al10是 什么型号的手机
  4. 本地数据库IndexedDB - 初学者
  5. word中删除多余的空白页
  6. 封装自己的js库(二)---仿照JQuery
  7. 快学Scala 学习笔记-1: (第一章到第三章)
  8. 2020厦门大学计算机系学硕,2020考研厦门大学推荐:热门专业及学科设置
  9. iframe父元素获取子页面的元素
  10. img: SVG格式在vue中的使用