爬取的数据仅用于科研
爬取的接口就不讲解了,代码中有
代码写于2017年9月,代码时效性差

【2019年8月6日更新】

  • 这个接口还可以使用,但是高德地图实行了反爬机制,很容易被禁(如下图)
  • 【解除禁止】打开高德地图的网站,随意搜索一个地点,它会进行非机器人验证,验证过后,重新输入此url,可以获得信息。但基本无用,爬一次,被禁一次。
  • 【问题!】代码已过时
  • 【解决方案】
    • 【策略一】如果小量的数据,建议使用这种半自动化半手工的形式(链接)
    • 【策略二】poiinfo接口+selenium+phantomjs(待更)
    • 【策略三】js逆向(待更)
  • 欢迎讨论wx:geodoer-top

# -*- coding:utf-8 -*-
# Author:PasserQi
# Time:2017/9/29
# Function:矢量化厦门市公园范围
import json
import time
import urllibimport arcgisscripting
import arcpy
import coordinate_conversion #该模块网址:https://blog.csdn.net/summer_dew/article/details/80723434
import os
from bs4 import BeautifulSoupoutPath = r"G:\workspace\python\arcpy\park_polygon.shp"AMAP_API_KEY = "***" #高德地图密匙
urlParamJson = {'city' : '厦门','output' : 'xml','key' : AMAP_API_KEY,'types' : '公园','citylimit' : 'true', #只返回指定城市数据'offset' : '20'#每页条数
}
MAX_PAGE = 100 #最大页数# return: list 厦门市公园POI的ID
def getParkPoiid():poiidList = []for page in range(1,MAX_PAGE) : #页数urlParamJson["page"] = pageprint "当前 %s 页..." % pageparams = urllib.urlencode(urlParamJson)url = "http://restapi.amap.com/v3/place/text?%s" % paramshttp = urllib.urlopen(url)dom = BeautifulSoup(http)poiList = dom.findAll("poi")if len(poiList)==0: #没有数据时则跳出breakfor poi in poiList:poiid = poi.id.get_text()poiidList.append(poiid.encode("utf8") )return poiidListdef getParkInfoList(poiidList):parkInfoList = []i = 1 #numberfor poiid in poiidList:parkInfo = {}params = urllib.urlencode({'id' : poiid})url = "http://ditu.amap.com/detail/get/detail?%s" % paramsprint "查询url %s" % urlhttp = urllib.urlopen(url)jsonStr = http.read()park = json.loads(jsonStr)spec = park["data"]["spec"] #spec每个数据都有haveShp = "没有"for key in spec:if key=="mining_shape":  #有 面状或线状 信息haveShp = "有"parkInfo["shape"] = spec[key]["shape"] #保存 shape属性parkInfo["name"] = park["data"]["base"]["name"].encode("utf8")parkInfo["type"] = park["data"]["base"]["business"].encode("utf8")parkInfoList.append(parkInfo)if len(parkInfoList) % 11 == 0:print "已获取 %s 个公园的矢量信息" % len(parkInfoList)breakprint "%s :%s" % (park["data"]["base"]["name"].encode("utf8"), haveShp )time.sleep(1)i = i+1if i%51==0:time.sleep(60)return parkInfoList# @funtion: 通过coordinates解析出XY的数组
# @param: coordinates字符串 格式"x,y;x,y;x,y..."
# @desc: 传入为gcj02坐标系坐标,返回wgs84坐标
# @dependence: arcpy,coordinate_conversion
# @return: arcpy.array
def getXYArray(XYsStr):XYarray = arcpy.CreateObject("array")XYList = XYsStr.split(';')for XYstr in XYList:XY = XYstr.split(',')XY[0],XY[1] = float(XY[0]),float(XY[1])point = arcpy.CreateObject("point")point.X,point.Y = coordinate_conversion.gcj02towgs84(XY[0], XY[1])XYarray.add(point)return XYarraydef saveParkPolygon(parkInfoList):gp = arcgisscripting.create()outWorkspace = os.path.split(outPath)[0]outName = os.path.split(outPath)[-1]spat_ref = "4326"gp.CreateFeatureClass_management(outWorkspace, outName, "POLYGON", "", "", "", spat_ref)gp.AddField_management(outPath, "name", "TEXT", field_length=250)gp.AddField_management(outPath, "type", "TEXT", field_length=250)cur = gp.InsertCursor(outPath)newRow = cur.newRow()for parkInfo in parkInfoList:for attr in parkInfo:if attr=="shape":# array = getXYArray(parkInfo["shape"])XYsStr = parkInfo["shape"]XYarray = gp.CreateObject("array")XYList = XYsStr.split(';')for XYstr in XYList:XY = XYstr.split(',')XY[0], XY[1] = float(XY[0]), float(XY[1])point = gp.CreateObject("point")point.X, point.Y = coordinate_conversion.gcj02towgs84(XY[0], XY[1])XYarray.add(point)newRow.setValue("Shape",XYarray)else:newRow.setValue(attr, parkInfo[attr] )cur.InsertRow(newRow)del cur,newRowif __name__ == '__main__':poiidList = getParkPoiid() #得到公园idprint "已得到 %s 个公园POI ID" %len(poiidList)parkInfoList = getParkInfoList(poiidList)print parkInfoListsaveParkPolygon(parkInfoList)

[爬虫] 爬取高德地图的面状数据存为shp - 公园数据为例相关推荐

  1. python爬取高德地图_爬虫实战:如何爬取高德地图?

    提起高德地图,咱们每一个人都不会陌生,高德地图是一款非常好用的地区服务软件,很多用户在出行的时候都会使用这款软件,日程用来导航,也可以用来打车,一次呼叫多种车型,用户可以在这里获得更好的服务,随时都可 ...

  2. 爬虫实战:如何爬取高德地图?

    提起高德地图,咱们每一个人都不会陌生,高德地图是一款非常好用的地区服务软件,很多用户在出行的时候都会使用这款软件,日程用来导航,也可以用来打车,一次呼叫多种车型,用户可以在这里获得更好的服务,随时都可 ...

  3. Python爬取高德地图各城市天气

    Python爬取高德地图各城市天气 爬虫练习项目之一.从高德地图json数据接口获取天气.可以获取某省的所有城市天气.高德地图的这个接口还能获取县城的天气,我只写到了市.有兴趣的朋友可以尝试一下. 完 ...

  4. 你的未来有我导航----教你如何爬取高德地图

    简单一文教你如何爬取高德地图 目录 推荐 一. 分析网页结构 二.拿到相关网址 三.代码实现 3.1 查询所有城市名称和编号 3.2 根据编号查询天气 四.完整代码 五.保存结果 一. 分析网页结构 ...

  5. python爬取高德地图数据_你的未来有我导航----教你如何爬取高德地图

    简单一文教你如何爬取高德地图 目录 推荐 一. 分析网页结构 二.拿到相关网址 三.代码实现 3.1 查询所有城市名称和编号 3.2 根据编号查询天气 四.完整代码 五.保存结果 一. 分析网页结构 ...

  6. PYTHON爬取高德地图POI

    PYTHON爬取高德地图POI 使用高德地图API爬取POI数据,首先需要申请高德地图API的KEY和获取<POI分类编码表>,本实例的最后结果是根据不同的poi类型分别生成多个EXCEL ...

  7. python爬取地图地址_网络爬虫-python爬取高德地图地点

    python爬取你想要的数据,近期由于业务需求,用python爬取了高德地图一些地点的数据,爬出来数据大致情况如下: image 下面是基本流程: 2.安装网络爬取第三方库,主要是下面三个(pip i ...

  8. 爬取高德地图全国poi的爬虫

    基于python3.6的爬取高德全国poi数据的爬虫,稳定性更高,爬取效率更快,由于高德poi的数据量比较大,这里使用了mongodb和Elasticsearch作为存储,只需要修改key值和type ...

  9. python零基础爬虫练习:如何用python爬取高德地图

    大家好,我是大志 这次介绍一个爬取动态网页的超简单的一个小demo. 说到动态网页,你对它了解多少呢? 简单来说,要获取静态网页的网页数据只需要给服务器发送该网页url地址就行,而动态网页的数据因为是 ...

最新文章

  1. android消除app卡顿,为什么你的app会出现卡顿?Android开发:关于性能需要考虑的...
  2. CCRD_TOC_2015_EULAR专刊第二辑
  3. 图文教程:使用MyEclipse的hibernate工具从数据库反向生成实体Bean
  4. Linux 下编译并运行C语言程序
  5. html字体代码大全_Vba群发邮件及HTML设置字体格式的代码
  6. 团队行为心理学读书笔记(3)领导力背后的行为心理学
  7. 并查集——畅通工程(hdu1232)
  8. 编写XML XmlTextWriter与XmlDocument(转载)
  9. 快速创建UI控件的 方法 ,值得总结1
  10. 计算机考试策略,计算机等级考试应试的策略.doc
  11. 编译Debian内核源码
  12. 冰河木马使用(纯属学习)
  13. jsp里table边框线_JSP表格边框颜色
  14. 基于C#和OpenVINO在英特尔独立显卡上部署PP-TinyPose模型
  15. linux驱动开发篇Linaro(arm交叉编译器的下载与安装)
  16. 把int型转成如66ccff这样的颜色16进制颜色代码
  17. 华为ICT题目-云服务题库3
  18. 如果微软狠心鸿蒙系统,微软强制用户升级华为鸿蒙系统出来你会放弃windows使用鸿蒙吗...
  19. 组织行为学笔记:第十二章 组织结构和组织设计
  20. MySQL:排序(filesort)详细解析(8000字长文)

热门文章

  1. 人脸检测(图像处理)
  2. mysql 数据库时间和当前时间不一致
  3. 理解前端组件化、模块化、工程化
  4. 北京物资学院计算机研究生,计算机考研:2018年北京物资学院硕士研究生招生简章...
  5. pycharm版本控制和数据库管理
  6. 董宇辉的解答一位父亲请教如何让子女从心里喜欢上英语
  7. Smba文件共享快速搭建
  8. Element UI 分页器
  9. 夜晚小记——centos安装WebMonitor监控页面并推送和phantomjs
  10. Linux内核启动流程(vmlinux)