根据关键字获取高德地图poi信息
根据关键字获取高德地图poi信息
百度地图和高德地图都提供了根据关键字获取相应的poi信息的api,不过它们提供给普通开发者使用的次数有限无法满足要求。其次百度地图返回的poi中位置信息不是经纬度,而高德地图则可以返回poi的经纬度信息。
网页分析
- 目的
以关键字怡景中心城为例,我们需要使用爬虫获取到高德地图返回的所有相关poi信息,本例中主要获取poi的名称和经纬度信息。

- url分析
通过chrome浏览器的监控,最终找到查询结果是通过json的形式返回,请求链接是
http://ditu.amap.com/service/poiInfo?query_type=TQUERY&pagesize=20&pagenum=1&qii=true&cluster_state=5&need_utd=true&utd_sceneid=1000&div=PC1000&addr_poi_merge=true&is_classify=true&zoom=17&city=440300&geoobj=114.056908%7C22.531457%7C114.062058%7C22.539831&keywords=%E6%80%A1%E6%99%AF%E4%B8%AD%E5%BF%83%E5%9F%8E
url中的keywords就是查询的关键字,pagenum页面数。此外经过分析发现返回结果包含20个poi信息,基本上覆盖了关键字区域,本篇博客仅爬取第一页的poi,如果想获取后续的poi,可以通过设置pagenum取值来得到。

poi信息包含在返回的joson数据中的poi_list字段
- 请求头构建

代码
class CrawlerGaoDe(object):
main_url = 'http://ditu.amap.com/service/poiInfo?query_type=TQUERY&pagesize=20&pagenum=1' \
'&qii=true&cluster_state=5&need_utd=true&utd_sceneid=1000&div=PC1000&addr_poi_merge' \
'=true&is_classify=true&zoom=16&city=440300&geoobj=114.044736%7C22.550641%' \
'7C114.055035%7C22.567386&keywords={0}'
def __init__(self, zone_name, proxy=None):
self.__zone_name = zone_name
if proxy is None:
self.__proxy = None
else:
self.__proxy = {'http': proxy}
def __init_crawler_args(self):
'''
初始化爬虫参数
:return:
'''
# 构造请求头
User_Agent = 'Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 ' \
'Mobile/13B143 Safari/601.1'
Host = 'ditu.amap.com'
Accept = '* / *'
Accept_Encoding = 'gzip, deflate'
Accept_Language = 'en - US, en;q = 0.8, zh - CN;q = 0.6, zh;q = 0.4'
amapuuid = 'b51b4430 - 611e-421e - b5f0 - d4c0069ec83a'
Connection = 'keep - alive'
cookie = 'guid=62e9-7327-26e6-8630; UM_distinctid=15bf554ac5ce3-07d1fa60bf59d3-24414032-' \
'cfcd8-15bf554ac5d163; _uab_collina=149446962066263280256309; passport_log' \
'in=ODY0OTIzNTQsYW1hcEF1SUZSNU45MiwyN2ZiY2x4YjJicWN3NGZjb29qYWtuYTY4bjhpdDEzN' \
'iwxNTA1Nzg4MDYzLE1XUm1OVE5oTlRRMk5tTmpOVEkwWWpWaU1EZzFNamRqTkdaaU5USmlabVk9; dev' \
'_help=A31pORob9CZKI7Sru%2B22%2FGUwNWY0ZTEyMDMwOGZiZWIyMTUyNDg3N2M5NzdiNGY3NzVhNGF' \
'iNDg5YzhjNjgzYmM5YjY5OTdmNjkxNjFlY2Y5%2BkDeYKdIYyjlQUymTgzjEbGZZwvhQT7HDehSDAbU71%' \
'2BgMgS1RZws1VsgIqQbVPGtHubQVNo3jkPiGQcc4GgNzC%2BXgQLxYhEc7WDMILJBY%2FJWXDmjfTh8Wf8e' \
'bkfF3VY%3D; key=bfe31f4e0fb231d29e1d3ce951e2c780; cna=HV1zEVpxFzkCATr4tPxil0OM; isg=At7' \
'eZS1TC8m1jV8txoi1zUMNL33gNqN9in7_KohnSiEcq36F8C_yKQRJwY1Y; CNZZDATA1255626299=593' \
'918092-1494468489-http%253A%252F%252Fwww.amap.com%252F%7C1505808643'
header = {}
header['User-Agent'] = User_Agent
header['Host'] = Host
header['Accept'] = Accept
header['Accept-Encoding'] = Accept_Encoding
header['Accept-Language'] = Accept_Language
header['amapuuid'] = amapuuid
header['Connection'] = Connection
header['cookie'] = cookie
self.__header = header
self.__url = self.main_url.format(self.__zone_name)
def __get_context_info(self):
'''
从高德地图爬取信息
:return:
'''
# 获取爬虫返回信息
req = requests.get(self.__url, headers=self.__header, proxies=self.__proxy)
# print req.json()
self.__context = req.json()
def __resolve_context(self):
'''
解析查询到的文本
:return:
'''
# 信息解析,保存poi名称和经纬度
pois = self.__context['data']['poi_list']
records = list()
for poi in pois:
tmp = {'zone_name': self.__zone_name, 'disp_name': poi['disp_name'],
'lng': float(poi['longitude']), 'lat': float(poi['latitude'])}
records.append(tmp)
return records
def do(self):
'''
执行
:return:
'''
self.__init_crawler_args()
self.__get_context_info()
return self.__resolve_context()
if __name__ == '__main__':
# 单个关键字查询
craw_gaode = CrawlerGaoDe('怡景中心城', None)
records = craw_gaode.do()
print records
pd.DataFrame.from_records(records).to_csv('/home/用户名/Desktop/test.txt', encoding='utf-8', index=False)
上述爬虫中可以添加代理ip,输出结果如下:
disp_name lat lng zone_name
怡景中心城 22.535799 114.05976 怡景中心城
怡景中心城停车场(出入口) 22.536416 114.059332 怡景中心城
怡景中心城广场停车场(出口) 22.536433 114.060231 怡景中心城
怡景中心城小天才专柜 22.535086 114.059913 怡景中心城
藤蔓慕果(怡景中心城店) 22.5358 114.05976 怡景中心城
中心城广场停车场(出入口) 22.536676 114.059312 怡景中心城
Miss南(怡景中心城店) 22.53511 114.059967 怡景中心城
麦当劳(怡景中心城店) 22.535774 114.0591 怡景中心城
汕头外砂乌弟卤鹅(怡景中心城店) 22.535729 114.059093 怡景中心城
家乐福(中心城店) 22.536266 114.059923 怡景中心城
陈钢串串香(怡景中心城店) 22.535411 114.05912 怡景中心城
指典世家(怡景中心城店) 22.5344 114.059681 怡景中心城
AT.PINK.CO(怡景中心城店) 22.536248 114.059305 怡景中心城
特斯拉充电站(ipower15私驾护理中心怡景中心城店) 22.536396 114.059341 怡景中心城
杂咖(怡景中心城) 22.535469 114.060467 怡景中心城
反斗乐园(怡景中心城) 22.535394 114.059777 怡景中心城
卫生间(怡景中心城) 22.536489 114.059134 怡景中心城
卫生间(怡景中心城) 22.535927 114.059091 怡景中心城
卫生间(怡景中心城) 22.536392 114.060427 怡景中心城
卫生间(怡景中心城) 22.535931 114.06033 怡景中心城
根据关键字获取高德地图poi信息的更多相关文章
- 高德地图POI爬取_Python
高德地图POI 官方文档:https://lbs.amap.com/api/webservice/guide/api/search#introduce 官网控制台:https://lbs.amap.c ...
- 获取百度地图POI数据二(准备搜索关键词)
上篇讲到 想要获取尽可能多的POI数据 需要准备尽可能多的搜索关键字 那么这些关键字如何得来呢? 本人使用的方法是通过一些网站来获取这些关键词 http://poi.mapbar.com ...
- 获取百度地图POI数据三(模拟关键词搜索)
上一篇博文中讲到如何获取用于搜索的关键词,并且已经准备好了一百五十万的关键词 这其中有门牌号码,餐馆酒店名称,公司名称,道路名称等.有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜 ...
- 基于 Golang 完整获取百度地图POI数据的方案
百度地图为web开发者提供了基于HTTP/HTTPS协议的丰富接口,其中包括地点检索服务,web开发者通过此接口可以检索区域内的POI数据.百度地图处于数据保护对接口做了限制,每次访问服务,最多只能检 ...
- 获取百度地图POI数据一(详解百度返回的POI数据)
POI是一切可以抽象为空间点的现实世界的实体,比如餐馆,酒店,车站,停车场等.POI数据具有空间坐标和各种属性,是各种地图查询软件的基础数据之一.百度地图作为国内顶尖的地图企业,其上具有丰富的POI数 ...
- 高德地图POI采集(URL-API)
新手从零学起,成功跑通,记一下,技术大神们多多指点. ———————————————— 1-概述 POI:兴趣点.对于百度.高德等电子地图来说,一个POI是地图上的一个店铺/商场/小区等等. 这次要解 ...
- 【python】获取高德地图省市区县列表
项目中需要用省市区来进行检索,原想高德地图肯定会有API来获得这些数据,结果没有找到,有一个接口好像可以用,但是会附带大量的边界坐标点. 所以就不如自己把高德的省市区列表扒下来,自己写接口来完成这个功 ...
- 获取高德地图api
先到高德开放平台首页按照关键字搜索地址,获取经纬度坐标: http://lbs.amap.com/console/show/picker 高德由坐标获取地址详细信息: http://restapi.a ...
- Java 通过地址获取经纬度 - 高德地图
一.添加依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-v ...
随机推荐
- Numpy 基础
Numpy 基础 参考https://www.jianshu.com/p/83c8ef18a1e8 import numpy as np 简单创建数组 # 创建简单列表 a = [1, 2, 3, 4 ...
- 【python 3】 函数 初识
函数初识 1.函数的定义.调用.返回值 函数的定义.调用.返回值 def demo(): ## 定义函数 (def + 空格 + 函数名 + () + 冒号) ## 如下为函数体 return a # ...
- Unity日常记录 - QualitySettings 性能设置
unity打包时,可通过QualitySettings优化图像性能,这是最常设置也是最明显的图像性能体现 设置图形质量的水平,一般来说,质量是以牺牲性能为代价的,所以最好不要追求移动设备或旧硬件的最高 ...
- hbuilder + 夜神模拟器
1. 安装hbuilder.夜神模拟器 2. 将夜神模拟器设为手机版,启用急速模式 3. 打开夜神模拟器设置,进入关于手机,点击版本号启用开发者模式 4. 进入开发者模式设置,启用usb调试 5. h ...
- LinkedList源码阅读笔记(1.8)
目录 LinkedList类的注解阅读 LinkedList类的定义 属性的定义 LinkedList构造器 核心方法 校验方法 普通方法 迭代器(iterator&ListIterator) ...
- cordova自定义插件的创建过程
最近学习了cordova插件,记录一下大概的过程,仅供参考. 前期的配置就不记录了网上好多. 在简书上从新写了一个更详细的cordova插件教程,有需要的可以点这里进去看看. 第一步 创建一个cord ...
- 括号生成(Java实现)
题目: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n =3,生成结果为: [ "((()))", "(()( ...
- MySQL中Decimal类型和Float Double的区别 & BigDecimal与Double使用场景
MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...
- javascript的几个知识点scoping, hoisting, IIFE
Scoping--作用域 ES6之前只有函数作用域.ES6加入块级作用域.用let声名的变量是块作用域内有效,用var声名的变量在函数作用域与块作用域里有效. Hoisting--提升 Hoistin ...
- mybatis 动态sql和参数
mybatis 动态sql 名词解析 OGNL表达式 OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性, ...