根据关键字获取高德地图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 ...
随机推荐
- XSS漏洞学习笔记
XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...
- 【新特性】JDK11
随着JDK11正式发布,带来了许多新的特性.本文主要介绍JDK11的部分新特性和新的API. 一.Local Var 在Lambda表达式中,可以使用var关键字来标识变量,变量类型由编译器自行推断. ...
- vue 开发环境搭建
https://www.cnblogs.com/goldlong/p/8027997.html 1,按照nodeJS. 2,nodejs 包含npm. 3, 执行: npm install -g @v ...
- Redis Index
Indexes 集群 主从模型 哨兵机制与RAFT算法 实践 单机多实例 开启Sentinel 存储 持久化 RDB 与 AOF 数据结构 内存管理 事务 并发问题 分布式锁 整体图 中间件 Jedi ...
- Tag
C# ASP.NET SQL SERVER .Net Entity Framework JS Question Records Others
- 10_bash_变量_条件判断及运算_sed_循环
shell编程: 编译器.解释器编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量):变量在使用前,必须事先声明,甚至还需要初始化 事先转换成可执行格式 C/C++.C#.Ja ...
- @keyframs实现图片gif效果
页面中使用动效图 一般让设计出一个gif格式的图,但是git图效果都很差,有一个替代gif图做动效的方法:使用@keyframes 具体思路: 1.设计两个互斥的图片(相当于把gif图分割成一帧一帧的 ...
- [转]OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
转自:https://blog.csdn.net/youngkingyj/article/details/23365849 开源与成熟商业的瓦片地图服务(TMS 2 WMTS),都有如下共同的特性 ...
- cowboy源码分析(二)
接 cowboy源码分析(一) 下面我们重点看看cowboy_protocol.erl代码 -module(cowboy_protocol). %% API. -export([start_link/ ...
- 关于lower_bound( )和upper_bound( )的常见用法
lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. 在从小到大的排序数组中, lower_bound( begin,end,num):从数 ...