实现目的:爬取昆明市范围内的所有中学数据,包括名称、坐标。python
先进入基础篇,本篇主要讲原理方面,并实现步骤分解,为python代码编写打基础。
由于是0基础开始,因此讲得会比较详细。
如实现目的所讲,爬取昆明市所有中学数据,就是获取百度地图上昆明市范围内全部关键字带中学的地理信息数据(兴趣点)。
怎么把百度地图上的数据抓取下来呢?
如下是教程:
本篇目录以下:
1. 百度地图开放平台注册,AK获取
2.关于ak的说明
3.请求URL说明
4.百度地图坐标拾取器
5.以坐标范围获取兴趣点POI
6.用excel完成URL阵列web
1.百度地图开放平台注册,AK获取。
(1)
若是想获取POI数据,首先要登录百度地图开放平台(http://lbsyun.baidu.com/),完成注册。
这个平台是百度地图为开发者提供接口用的,有不少其余的功能,这里只讲POI爬取相关。
固然,有百度帐号的话,直接登录就能够。
这个界面很熟悉,很少说。 编程
(2)登录百度地图开放平台后,按照图面上的序号操做。
1、点击进入控制台;
2、点击进入建立应用;
3、起个应用名称;
4、若是有必要,设置个IP白名单啥的,限制调用ak的电脑;
5、提交。
6、其余默认,不用改。 json
而后你就能看到本身建立的ak了。 api
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=中学®ion=昆明&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO
是否是生成了下面的一个页面? python爬虫
这就是爬取到的一页昆明中学的信息。
而后咱们分段解释这行URL。
http://api.map.baidu.com/place/v2/search?query=中学®ion=昆明&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=饭店®ion=北京&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO函数
但咱们发现,网页上呈现的数据一共就四五条,昆明的中学,北京的饭店,不可能就这么几个。
接着以昆明的中学为例,对这个URL进行改进。
http://api.map.baidu.com/place/v2/search?query=中学®ion=昆明&page_size=20&page_num=0&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO
把这个URL复制到浏览器里看一看,仔细数一下网页上爬下来的中学数量,20个。
从这个实践中能理解上文中提到的,每一个URL页面只能显示20个兴趣点的信息了吧!
而后把两个URL仔细对比一下:
第一个:
http://api.map.baidu.com/place/v2/search?query=中学®ion=昆明&output=json&ak=9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO
第二个:
http://api.map.baidu.com/place/v2/search?query=中学®ion=昆明&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®ion=%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®ion=%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=中学®ion=昆明&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