爬取百度地图poi数据,Python爬取百度图片
目的:抓取昆明市所有中学的数据,包括名称和坐标。
首先进入基础章节。本章主要讲原理,实现步骤分解,为python代码编写打下基础。
因为是0基础的开始,所以会比较详细。
要达到目的,爬取昆明所有中学的数据,就是获取百度地图上昆明所有关键词的地理信息数据(兴趣点)。
如何抓取百度地图上的数据?
以下是教程:
该目录如下:
1.百度地图开放平台注册,AK接入
2.ak的描述
3.请求URL描述
4.百度地图坐标选择器
5.获取坐标范围内的感兴趣点。
6.用excel完成URL数组
1.百度地图开放平台注册,AK接入。
(1)
如果你想获取POI数据,你必须首先登录百度地图开放平台(http://lbsyun.baidu.com/)并完成注册。
这个平台是百度地图用来给开发者提供接口的,它还有很多其他的功能。这里只说POI抓取。
当然,如果你有百度账号,可以直接登录。
这个界面比较熟悉,就不多说了。
(2)登陆百度地图开放平台后,按照地图上的序号。
1.点击进入控制台;
第二,点击创建应用;
第三,应用程序名称;
4.必要时设置IP白名单,限制电脑调用AK;
动词(verb的缩写)提交。
不及物动词其他默认,不要改。
然后你就可以看到你创造的ak了。
2.关于ak的解释。
关于这部分的解释,详见开发文档——web Service API。
这里说一下配额的问题。
首先,百度不支持你造一把ak随便用。对于大部分未认证用户来说,每天的额度是有限的,每分钟不能超过10万次和6000次。
当然这个额度主要是触发定位功能。
在爬行POI上,ak一次生成的URL页面只能显示20个兴趣点的信息,而在一个坐标范围内,最多可以生成20个URL页面。
也就是说,在一个坐标范围内,ak生成的URL页面最多可以抓取400个兴趣点。
如果昆明的中学不超过400所,那么一个坐标范围就够了,如果超过400所就不够了。
ak额度的解释到此为止,后面步骤的详细解释会涉及到。
3.请求URL描述。
把下面的网址复制到浏览器里看看。
http://api.map.baidu.com/place/v2/search?查询=中学地区=昆明输出=JSON AK=9s 5 gsyzswbmafu 8 PS 2v2 wvdldlqgaao
您是否生成了以下页面?
这是昆明中学的信息。
然后我们将分章节解释这个URL。
http://api.map.baidu.com/place/v2/search?查询=中学地区=昆明输出=JSON AK=9s 5 gsyzswbmafu 8 PS 2v2 wvdldlqgaao
http://api.map.baidu.com/place/v2/search?这个前缀在百度地图(API)上可以找到。
查询=中学查询关键字是中学。
区域=昆明查询区域为昆明。
Output=json以json格式输出。
AK=9s 5 gsyzswbmafu 8 PS 2v 2 wvdldlqgaao AK是9s 5 gsyzswbmafu 8 PS 2v wvdldlqgaao(这是我刚申请的AK,图片是马赛克。为了写个教程方便理解,没有给它设置IP白名单,所以放在这里。让我们练习使用它。)
网址很好理解。如果我想在北京找一家酒店,它的网址是:http://api.map.baidu.com/place/v2/search?查询=酒店地区=北京输出=JSON AK=9s 5 gsyzswbmafu 8 PS 2v2 wvdldlqgaao
但是我们发现网页上呈现的数据只有四五条,比如昆明的中学,北京的酒店,不可能就那么几条。
然后以昆明的中学为例,对这个网址进行改进。
http://api.map.baidu.com/place/v2/search?Query=中学地区=昆明page _ size=20 page _ num=0 output=JSON AK=95 gsyzswbmafu 8 PS 2v2 wvdldlqgaao
把这个网址复制到浏览器里看一看,仔细数一数爬下网页的中学,20所。
从这个实践中我们可以了解到,每个URL页面只能显示20个兴趣点的信息。
然后仔细比较这两个URL:
第一个:
http://api.map.baidu.com/place/v2/search?查询=中学地区=昆明输出=JSON AK=9s 5 gsyzswbmafu 8 PS 2v2 wvdldlqgaao
第二个:
http://api.map.baidu.com/place/v2/search?Query=中学地区=昆明page _ size=20 page _ num=0 output=JSON AK=95 gsyzswbmafu 8 PS 2v2 wvdldlqgaao
看看这两个有什么区别?
第二个有一个额外的page_size=20page_num=0。这是什么意思?总共可以生成20个URL页面,这是第0个。我们知道,编程语言的编号一般从0开始。
将page_size=20page_num=0更改为page_size=20page_num=1,尝试一下,看看第二个页面会生成什么,然后将其更改为page _ size=20page _ num=2.
当page_size=20page_num=19时,URL为http://api.map.baidu.com/place/v2/search?查询=中学地区=昆明page _ size=20 page _ num=19 output=JSON AK=95 gsyzswbmafu 8ps 2 v2 wvdldlqgaao
请尝试将其更改为page_size=20page_num=20。网址是http://api.map.baidu.com/place/v2/search?查询=中学地区=昆明page _ size=20 page _ num=20 output=JSON AK=95 gsyzswbmafu 8ps 2v2 vwvdldlqgaao
如下图,没什么看点。这一次,很容易理解上面提到的内容。在一个坐标范围内,最多可以生成20个URL页面!
这次我们知道网址最多可以抓取400个兴趣点,所以我们想要获取的兴趣点数量远远不止400个。我们能做什么?
别急,继续往下看。
4.百度地图坐标选择器
在回答上面的问题之前,我们先来了解一个工具,那就是坐标拾取器。
进入开发文档——工具以支持——坐标选择器。
打开坐标选择器,进入百度地图坐标选择器系统。
在这个拾音坐标系上,首先,设置范围;二、点击地图;三、看到当前坐标点如下,复制一下,就可以得到这个点的百度坐标了。
自己估算一个矩形范围,拿起一个左下角坐标,再拿起一个右上角坐标。
如果估计实在不好,找一张全国行政区划图。
这个有点麻烦。我会再写一篇如何获取行政区的教程。
挑一个昆明的直角坐标。
左下角:102.174112,24.48894
右上角:103.67742,26.486868686866
(获取矩形左下角和右上角坐标值的简单方法在高级章节。)
5.获取坐标范围内的感兴趣点。
现在知道昆明的坐标范围了。
然后把上面的网址改一下。
这是上面的网址:http://api.map.baidu.com/place/v2/search?查询=中学地区=昆明page _ size=20 page _ num=0 output=JSON AK=95 gsyzswbmafu 8 PS 2v2 wvdldlqgaao
已更改的URL:http://api.map.baidu.com/place/v2/search?查询=中学界限=24.390894,102.174112,26.548645,103.678942 page _ size=20 page _ num=0 output=JSON AK=95 gsyzswbmafu 8 PS 2 v2 wvdldlqgaao
对比一下,有什么区别!
之前的range属性是:region=昆明。
修改后的范围属性是:Bounds=24.390894,102.174112,26。56666 . 68668666666
注意,经纬度范围是bounds=左下纬度,左下经度,右上纬度,右上经度。
其他都没变。在坐标范围内攀爬最多只能爬400点兴趣点。
好了,回答前面的问题,兴趣点数量远远超过400该怎么办?
可以划分矩形范围!
把昆明的范围改成经纬度,左下角和右上角组成一个长方形。如果一个矩形中有超过400个兴趣点,那么我们可以把这个矩形分成四个矩形。分别获取四个小矩形内的兴趣点,然后进行总结。
如果四个不够,就切成八个;如果八个不够,就切成十六个,只要每个矩形中的兴趣点不超过400个。
至于有多少,怎么分,那就要靠经验自己去猜测了。
说了这么多,这就是后续python编程的思路。
6.用excel完成URL数组。
这是后面python爬虫脚本编写的热身。
让我们用excel来强化编码思想。
目的:
爬昆明中学的POI。
关键词:中学
现有AK:9s 5s 5 gsyzswbmafu 8 PS 2 vwvdldlqgaao
昆明坐标范围:
左下角:24.390894,10412
右上角:26.5448758678667
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=95 gsyzswbmafu 8 PS 2 vwvdldlqgaao
将坐标范围输入excel,计算四个矩形的范围,然后四个矩形对应四列URL(page _ num值0到19),用excel函数生成四列80个URL。
在这些URL中,只有两个属性发生了变化,即bounds(边界范围)和page_num(页码0-19),其他都没有变化。
URL的生成是有规律的。
这是编程的思路,代码章节有解释。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。