使用Python划分矩形网格爬取百度POI数据

…衆ロ難τιáo~ 提交于 2019-12-24 12:57:45

原文地址: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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!