零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)

实现目的:爬取昆明市范围内的全部中学数据,包括名称、坐标。

先进入基础篇,本篇主要讲原理方面,并实现步骤分解,为python代码编写打基础。 
因为是0基础开始,所以讲得会比较详细。 
如实现目的所讲,爬取昆明市全部中学数据,就是获取百度地图上昆明市范围内所有关键字带中学的地理信息数据(兴趣点)。 
怎么把百度地图上的数据抓取下来呢? 
以下是教程: 
本篇目录如下: 
1. 百度地图开放平台注册,AK获取 
2.关于ak的说明 
3.请求URL说明 
4.百度地图坐标拾取器 
5.以坐标范围获取兴趣点POI 
6.用excel完成URL阵列

1.百度地图开放平台注册,AK获取。 
(1) 
如果想获取POI数据,首先要登陆百度地图开放平台(http://lbsyun.baidu.com/),完成注册。 
这个平台是百度地图为开发者提供接口用的,有很多其他的功能,这里只讲POI爬取相关。 
当然,有百度账号的话,直接登陆就可以。 
这个界面很熟悉,不多说。

(2)登陆百度地图开放平台后,按照图面上的序号操作。 
一、点击进入控制台; 
二、点击进入创建应用; 
三、起个应用名称; 
四、如果有必要,设置个IP白名单啥的,限制调用ak的电脑; 
五、提交。 
六、其他默认,不用改。

然后你就能看到自己创建的ak了。

2.关于ak的说明。 
关于这部分的解释,详细的可以看开发文档——web服务API部分。

这里说一下配额方面的问题。 
首先百度不支持你创建了一个ak就可以随便用,对于大多数未认证用户,每天的配额是有限的,不能超过十万次,每分钟不能超过6千次。 
当然这个配额主要是触发定位功能的。 
在爬取POI上,用一次ak生成的URL页面只能显示20个兴趣点的信息,而一个坐标范围内,最多能生成20个URL页面。 
也就是说,一个坐标范围内,用ak生成的URL页面最多能爬取到400个兴趣点的信息。 
如果昆明市中学不超过400个,那么一个坐标范围就够了,但是如果超过400个,那就不够用了。 
关于ak配额的说明先到这里,下面的步骤详解中还会涉及到。 
3.请求URL说明。 
把下面这个网址复制到浏览器里看看。 
http://api.map.baidu.com/place/v2/search?query=中学&region=昆明&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
是不是生成了下面的一个页面?

这就是爬取到的一页昆明中学的信息。 
然后我们分段解释这行URL。 
http://api.map.baidu.com/place/v2/search?query=中学&region=昆明&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
http://api.map.baidu.com/place/v2/search? 这个前缀就是在百度地图(API)上寻找。 
query=中学 查询关键字是中学。 
region=昆明 查询地区是昆明。 
output=json 以json格式来输出。 
ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO ak是9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO。(这个就是刚才申请的ak,图上打了马赛克,我为了写教程便于理解,没有给它设置IP白名单,就放在这里了,大家练习用吧。) 
这行URL很好理解,照猫画虎,如果我要找北京的饭店,其URL就是:http://api.map.baidu.com/place/v2/search?query=饭店&region=北京&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

但我们发现,网页上呈现的数据一共就四五条,昆明的中学,北京的饭店,不可能就这么几个。 
接着以昆明的中学为例,对这个URL进行改进。 
http://api.map.baidu.com/place/v2/search?query=中学&region=昆明&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
把这个URL复制到浏览器里看一看,仔细数一下网页上爬下来的中学数量,20个。 
从这个实践中能理解上文中提到的,每个URL页面只能显示20个兴趣点的信息了吧! 
然后把两个URL仔细对比一下: 
第一个: 
http://api.map.baidu.com/place/v2/search?query=中学&region=昆明&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
第二个: 
http://api.map.baidu.com/place/v2/search?query=中学&region=昆明&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
看看这两个有什么不同? 
第二个多了一个page_size=20&page_num=0,这个是什么意思呢?一共能生成20个URL页面,这个是第0个,我们知道,程序语言的排号,一般都是从0开始的。 
把page_size=20&page_num=0改成page_size=20&page_num=1,试一试,看看第二个页面生成了什么,再改成page_size=20&page_num=2…… 
改成page_size=20&page_num=19的时候,URL是http://api.map.baidu.com/place/v2/search?query=%E4%B8%AD%E5%AD%A6&region=%E6%98%86%E6%98%8E&page_size=20&page_num=19&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

改成page_size=20&page_num=20试一试,URL是http://api.map.baidu.com/place/v2/search?query=%E4%B8%AD%E5%AD%A6&region=%E6%98%86%E6%98%8E&page_size=20&page_num=20&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO。 
显示的是下图,没有兴趣点,这回好理解上文中提到的,一个坐标范围内,最多能生成20个URL页面了吧!

这回我们知道了URL最多就能爬取400个兴趣点,那我们要获取的兴趣点数量远远超过400个,可怎么办呢? 
别急,接着往下看。

4.百度地图坐标拾取器 
在回答上面的问题之前,我们先了解一个工具,就是坐标拾取器。 
进入开发文档——工具支持——坐标拾取器。 
打开坐标拾取器,进入百度地图坐标拾取系统。

在这个拾取坐标系统上,一,先设定范围;二,在地图上点一下;三,看到当前坐标点如下,复制一下,就可以得到这点的百度坐标了。 
自己估摸着一个矩形范围,拾取一个左下角坐标,再拾取一个右上角坐标。

要是实在估摸不好,找一张全国行政区划图看看。 
这个稍微有点麻烦,我以后会再写一个教程介绍怎么获取行政区域范围。 
拾取一个昆明范围的矩形坐标。 
左下角:102.174112,24.390894 
右上角:103.678942,26.548645 
(获取矩形左下角和右上角坐标值的简捷方式在进阶篇中。)

5.以坐标范围获取兴趣点POI。 
我们现在已经知道昆明的坐标范围了。 
那么把上面的URL改一改。 
这个是上文中的URL:http://api.map.baidu.com/place/v2/search?query=中学&region=昆明&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
改动后的URL:http://api.map.baidu.com/place/v2/search?query=中学& bounds=24.390894,102.174112,26.548645,103.678942&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
对比一下,有什么不一样的! 
之前的范围属性是:region=昆明 
改动后的范围属性是:bounds=24.390894,102.174112,26.548645,103.678942 
注意,经纬度范围是bounds=左下角纬度,左下角经度,右上角纬度,右上角经度。 
其他的都没有变化,以坐标范围爬取,也只能最多爬400个兴趣点。 
好了,回答之前提出的问题,如果兴趣点数量远超过400个,怎么办? 
可以把矩形范围分割啊! 
把昆明市的范围换成经纬度,左下角和右上角构成了一个矩形,如果一块矩形中的兴趣点超过了400个,那么我们可以把这个矩形切分,变成四个矩形。分别获取四个小矩形范围内的兴趣点,然后汇总。 
四个不够的话,切分成八个,八个不够的话,切分成十六个,只要保证每个矩形内兴趣点不超过400个就行。 
至于应该切分多少个,怎么切分,靠经验,自己估摸。 
说到这里,这就是后续python编程的思路了。

6.用excel完成URL阵列。 
这个算是为之后的python爬虫脚本编写预热了。 
我们用excel强化一下编码思路。

目的: 
爬取昆明市中学的兴趣点POI。 
关键词:中学 
已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 
昆明市坐标范围: 
左下角:24.390894,102.174112 
右上角:26.548645,103.678942 
URL模板: 
http://api.map.baidu.com/place/v2/search?query=中学& bounds=24.390894,102.174112,26.548645,103.678942&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO

把坐标范围输入到excel中,计算4个矩形的范围,然后4个矩形对应4列URL(page_num值0到19),用excel函数生成了4列共80个URL。

在这些URL中,只有两个属性是有变动的,既是bounds(边界范围),page_num(页码0-19),其他都是不变化的。 
URL的生成是有规律可循的。 
这就是编程的思路,代码篇讲解。

转自-------http://blog.csdn.net/sinat_41310868/article/details/78746094

原文地址:https://www.cnblogs.com/lilinpging/p/8193324.html

时间: 2024-10-13 10:11:36

零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)的相关文章

顾维灏谈百度地图数据采集:POI自动处理率达90%

顾维灏谈百度地图数据采集:POI自动处理率达90% 发布时间:2015-12-21 22:37        来源:cnsoftnews.com        作者: 百度地图还创新研发高精地图,并成为国内唯一掌握这一无人驾驶汽车的核心技术的地图厂商.基于强大的自采能力和不断开拓的技术创新,百度地图正在变革人们对于地图的定义. 12月21日,百度地图十周年生态大会在798艺术区尤伦斯当代艺术中心举行,百度地图事业部副总经理顾维灏出席大会并发表主题演讲.顾维灏表示,百度地图已经拥有超过4000万的

百度地图坐标获取器

直接把百度地图坐标获取器放到dom里面有时会 引起js失效:用iframe标签就会涉及到父窗口的操作 代码如下 父窗口 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv=&

HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地(转)

HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地 我是应用在微信中,自定义菜单,菜单直接链接到这个HTML5页面,获取当前位置后,页面中定好目的地,这样打开页面后直接进入导航页面 可以省下先发送位置信息后,点确定再出导航,省一步, <!DOCTYPE html> <html lang="zh-cmn-Hans"> <meta charset="UTF-8"> <meta name="viewpor

根据百度地图API获取指定地点的经纬度

做项目时,遇到对地点获取地图中对应的经纬度,作一下笔记,以备以后直接使用 package com.hpzx.data; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.n

python爬取基础网页图片

python基础爬虫总结 1.爬取信息原理 与浏览器客户端类似,向网站的服务器发送一个请求,该请求一般是url,也就是网址.之后服务器响应一个html页面给客户端,当然也有其他数据类型的信息,这些就是网页内容.我们要做的就是解析这些信息,然后选择我们想要的,将它爬取下来按要求写入到本地. 2. 爬虫基本流程 1.获取网页的响应的信息 这里有两个常用的方法 html = requests.get(url) return html.text 或者 html = urllib.request.urlo

Android应用中使用百度地图API之POI(三)

先看执行后的图吧: POI(Point of Interest).中文能够翻译为"兴趣点".在地理信息系统中.一个POI能够是一栋房子.一个商铺.一个邮筒.一个公交站等  具体:http://developer.baidu.com/map/sdkandev-4.htm 主要应用 MKSearch 类: com.baidu.mapapi.search 类 MKSearch java.lang.Object com.baidu.mapapi.search.MKSearch public c

百度地图进阶【POI数据检索】

前面学习百度地图的一些基本的用法,这次我们一起来看一看百度地图的检索功能吧 poi检索api的基本用法 百度地图的POI类中共有如下几个方法 PoiBoundSearchOption POI范围内检索参数 PoiCitySearchOption poi城市内检索参数 PoiDetailResult 详情检索结果 PoiDetailSearchOption poi 详情检索参数 PoiNearbySearchOption 附近检索参数 PoiResult poi搜索结果. PoiSearch PO

android使用百度地图SDK获取定位信息

本文使用Android Studio开发. 获取定位信息相对简单,我们只需要如下几步: 第一步,注册百度账号,在百度地图开放平台新建应用.生成API_KEY.这些就不细说了,请前往这里:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key 第二步,下载sdk,地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download

百度地图开发之poi检索,线路规划

  官方文档 http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key 先去官方文档申请秘钥下载压缩文件等操作,参考 百度地图的秘钥申请与sdk下载,显示地图(1) 公交,步行,驾车路线查询,附近POI查询 参考文档导入所需jar包和so文件 标注点,覆盖物的实现见官方文档  poi检索:1.首先获取地图,创建poi检索实例: private void initView() { //输入框 etPoi = (EditText) in