根据关键字获取高德地图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信息的更多相关文章

  1. 高德地图POI爬取_Python

    高德地图POI 官方文档:https://lbs.amap.com/api/webservice/guide/api/search#introduce 官网控制台:https://lbs.amap.c ...

  2. 获取百度地图POI数据二(准备搜索关键词)

    上篇讲到  想要获取尽可能多的POI数据 需要准备尽可能多的搜索关键字   那么这些关键字如何得来呢?   本人使用的方法是通过一些网站来获取这些关键词   http://poi.mapbar.com ...

  3. 获取百度地图POI数据三(模拟关键词搜索)

    上一篇博文中讲到如何获取用于搜索的关键词,并且已经准备好了一百五十万的关键词   这其中有门牌号码,餐馆酒店名称,公司名称,道路名称等.有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜 ...

  4. 基于 Golang 完整获取百度地图POI数据的方案

    百度地图为web开发者提供了基于HTTP/HTTPS协议的丰富接口,其中包括地点检索服务,web开发者通过此接口可以检索区域内的POI数据.百度地图处于数据保护对接口做了限制,每次访问服务,最多只能检 ...

  5. 获取百度地图POI数据一(详解百度返回的POI数据)

    POI是一切可以抽象为空间点的现实世界的实体,比如餐馆,酒店,车站,停车场等.POI数据具有空间坐标和各种属性,是各种地图查询软件的基础数据之一.百度地图作为国内顶尖的地图企业,其上具有丰富的POI数 ...

  6. 高德地图POI采集(URL-API)

    新手从零学起,成功跑通,记一下,技术大神们多多指点. ———————————————— 1-概述 POI:兴趣点.对于百度.高德等电子地图来说,一个POI是地图上的一个店铺/商场/小区等等. 这次要解 ...

  7. 【python】获取高德地图省市区县列表

    项目中需要用省市区来进行检索,原想高德地图肯定会有API来获得这些数据,结果没有找到,有一个接口好像可以用,但是会附带大量的边界坐标点. 所以就不如自己把高德的省市区列表扒下来,自己写接口来完成这个功 ...

  8. 获取高德地图api

    先到高德开放平台首页按照关键字搜索地址,获取经纬度坐标: http://lbs.amap.com/console/show/picker 高德由坐标获取地址详细信息: http://restapi.a ...

  9. Java 通过地址获取经纬度 - 高德地图

    一.添加依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-v ...

随机推荐

  1. C#线程同步(1)- 临界区&Lock

    文章原始出处 http://xxinside.blogbus.com/logs/46441956.html 预备知识:线程的相关概念和知识,有多线程编码的初步经验. 一个机会,索性把线程同步的问题在C ...

  2. SpringMVC,SpringBoot使用ajax传递对象集合/数组到后台

    假设有一个bean名叫TestPOJO. 1.使用ajax从前台传递一个对象数组/集合到后台. 前台ajax写法: var testPOJO=new Array(); //这里组装testPOJO数组 ...

  3. L1,L2正则化代码

    # L1正则 import numpy as np from sklearn.linear_model import Lasso from sklearn.linear_model import SG ...

  4. Hive 导入 parquet 格式数据(未完,待续)

    Hive 导入 parquet 格式数据 Parquet 格式文件,查看Schema Parquet 之mapreduce Hive 导入 parquet 格式数据

  5. SQL Server監控与診斷

    僅為記錄工作中遇到的問題. 1. 字符串截斷: SQL server里很多job用於運行DTS,經常會收到系統出錯警報,如: ...String ) The statement has been te ...

  6. centos7——mysql5.7忘记root密码的处理方式

    参考资料:https://www.cnblogs.com/nangch/p/5521193.html 解决方法: 一.通过编辑/etc/my.cnf文件在[mysqld]下面加上skip-grant- ...

  7. 关于li标签的value属性值的获取问题

    在前几天的开发过程中,遇到了这样一个问题. 在li标签中嵌入了一个value属性,如这样滴: <li id="ts1" value="0001">& ...

  8. 解决IE11安装时需要“获取更新”(IE11离线安装)

    方法一:说明:目前是针对Windows7 64位操作系统安装! 1. 在C盘下新建文件夹,取名为“IE11”. 2. 将官网下载的IE11离线包放到此文件夹中. 3. win + r 打开运行窗口,输 ...

  9. Java并发编程的挑战

    并发编程的目的是为了让程序运行得更快,但是,并不是线程启动的越多,就能让程序最大限度地并发执行.并发编程时,会面临非常多的挑战,比如上下文切换的问题,死锁的问题,以及受限于各种硬件和软件的资源限制问题 ...

  10. HTTP请求头和响应头部包括的信息有哪些?(转)

    转载自:https://www.cnblogs.com/hxc555/p/6506154.html 每个HTTP请求和响应都会带有相应的头部信息.默认情况下,在发送XHR请求的同时,还会发送下列头部信 ...