原文地址:http://www.mapboxx.cn/article/bmappoi/
各大互联网地图厂商均提供了开放的POI数据,不过各个地图几乎都对一个城市能采集的POI数量有限制,高德地图是900条,百度更狠,才400条,这种很明显与实际的数量相差甚远,因此,可以采用将大范围划分为N多个小矩形范围,调用百度提供的矩形范围POI爬取接口,将各个小矩形爬取的POI汇总,即可得到大区域内的所有POI数据,理论上来说,只要矩形划分得足够小,就能爬到大区域内的所有POI数据,但是百度高德是否也对矩形范围内的数据有所限制也说不定。不过,从目前来看,使用划分矩形来爬到的POI数据量比在城市内搜索的方式得到的数据量多了很多很多,缺点是爬取的耗时比较久。因此最好就是在自己电脑上跑。前次爬深圳的所有住宅区大概用了半小时,总的大概3W条数据。
如果想查看高德地图POI数据爬取可以参考:
- 高德POI划分矩形范围爬取:http://www.mapboxx.cn/article/poi-pology/
- 高德POI根据关键字爬取在线工具:http://www.mapboxx.cn/tool/poiview/
百度地图根据矩形范围爬取的API地址在这:
其实很简单, 主要的参数是需要的POI类型、以及矩形范围坐标(也支持多边形范围),矩形的话只需要传入左下角和右上角坐标即可。因此我们的主要流程其实就是:
- 申请百度开放平台密钥
- 确定需要爬取的坐标范围(注意需要传入百度地理坐标系);
- 把需要爬取的大范围切分为多个小矩形范围;
- 传入小矩形左下和右上角坐标对,调用百度API;
- 解析返回的数据,写入CSV或者EXCEL文件中。
申请密钥:
百度地图API开放平台地址:http://lbsyun.baidu.com/,登录后注册账号,并且需要认证开发者(需要上传身份证,还有填写100字的使用说明),认证后在控制台创建应用,并且创建密钥,密钥类型必须为WEB服务,创建成功后保存下密钥。
确定需要爬取的坐标范围
可以使用坐标拾取工具采集需要爬取的经纬度范围,左下角和右上角的坐标即可。
把需要爬取的大范围切分为多个小矩形范围
这里其实也不难,主要就是定义一个扫描器,是一个自定义的长宽的小矩形,用它去扫描需要爬取的大范围,就可以将其划分为N多个小矩形。
调用百度地图API
URL示例:
http://api.map.baidu.com/place/v2/search?query=%E4%BD%8F%E5%AE%85%E5%8C%BA&bounds=22.4897508735693,113.83405746228844,22.50021493519637,113.84783407925634&output=json&ak=1QkdIjutWv0jBDZEKqy9TH4O3divaRcS&scope=2&page_size=20&page_num=0
解析返回的数据
因为这直接调用API就可以拿到数据了,没有什么反爬的说法,比较简单,因此就不会细说具体的代码细节,这里直接贴上代码吧,修改WindowSize
的大小可以改变同一个范围划分的小矩形个数,这个值越小,划分的矩形个数越多,爬取的数据量可能越多,耗时也就越久。
代码参见:http://www.mapboxx.cn/article/bmappoi/
欢迎加入QQ群:626697156
来源:CSDN
作者:人如墨
链接:https://blog.csdn.net/qq_34464926/article/details/103679838