首先呢,先要把python的环境给安装好,然后选个好的IDE,推荐使用pycharm。(刚才有大佬说Eclipse 表示不服,好吧,我也给推荐推荐,哈哈哈)
python及pycharm安装请自行百度。
附个链接:http://blog.csdn.net/qq_29883591/article/details/52664478
进入正题,爬poi,目前主流的互联网地图高德、腾讯、百度,因为有高德的企业级开发者权限,所以呢,就拿高德地图开刀了。
服务调用量配额说明下边呢,先讲一下爬POI的思路,将需要研究的区域划分为均匀的网格,比如200m*200m的网格,然后逐个网格调用高德地图Web服务搜索API,解析返回的结果,就能得到你想要的POI数据了。
搜索API概述 要用到的多边形搜索API参数 搜索返回结果参数说明放个高德地图搜索API的链接:http://lbs.amap.com/api/webservice/guide/api/search#text
下边就开始上代码了:
首先呢,确定一下研究区域了,在arcgis里边,用经纬度坐标系,在属性里边,看看上下左右的四至坐标。
帝都四至坐标找的四至坐标以后,就该构建网格了,在arcgis里边用渔网工具很方便就能构建出规则网格,但是呢,如果要再去读shp数据获取四至坐标,有点麻烦了,还有个取巧的办法可以用,让经度和纬度逐次加0.01(0.1、0.001)都是可以的,经过测试,经纬度逐次加0.01大概能满足需求。代码如下:
# coding=utf-8 #
size=1000#这个参数就是控制网格的尺寸1000代表0.001,100代表0.01,10代表0.1 多大尺寸,你高兴就好
min_lng=int(115.41688*size)
max_lng=int(117.508144*size)
min_lat=int(39.442065*size)
max_lat=int(41.059211*size)
forlnginrange(min_lng,max_lng,1):
forlatinrange(min_lat,max_lat,1):
fw =str(float(lng) / size) +","+str(float(lat +1) / size) +";"+str(float(lng +1) / size) +","+str(
float(lat) / size)
print fw
吐槽一下简书,妈蛋,py居然不给缩进,FK它。(有兴趣可以把这个代码考下来自己运行一下,切记要缩进!!!缩进!!!缩进!!!)
代码运行效果应该如上图所示好了,到这一步,网格已经打好了,下边就是调用API,解析返回数据了。
url="http://restapi.amap.com/v3/place/polygon?key=e3ce63bebbb94aea113c2904abe5ad7c&polygon="+fw+"&keywords=&types=05&offset=50&page=1&extensions=all"
构建好了url,type=05代表是餐饮服务的POI,具体的各个数值代表的含义http://lbs.amap.com/api/webservice/download通过这里下载《POI分类编码》即可。
其余参数具体含义请查阅参考文档。
url构建完成以后就该发送请求,接收返回值了。
page= urllib2.urlopen(url,timeout=5)
result =page.read()
其实就这两行代码
不过因为要用到urllib2的包,所以呢,前边要加一句impor turllib2
运行效果大概就是下边这个样子了
运行效果就这样了这个呢,数据是都有了,但是没法用啊,到这步,只是把数据爬回来了,但是,重点来了,要解析规整,把数据处理成我们习惯的格式。so,就用到json解析数据了。还是一句代码:
result_json = json.loads(result)
老规矩,又有新的包来了,先引入包import json
好了,现在返回的数据已经成了字典了。推荐个网站
http://www.bejson.com/jsonviewernew/
json在线解析,视图查看。
json在线视图这样看着这个dic的结构是不是更清晰了,嘿嘿嘿嘿。。。。。。。。
下边就是解析json了,这个我就不过多赘述了,大家可以自行百度 “python解析json”
基本上就这样操作了pois=result_json["pois"]
forpoiinpois:
printpoi["name"],poi["type"],poi["location"]
好了,到这里,我们需要的POI的名称,类型,经纬度坐标都已经出来了。
最终运行结果就这样了好了,这篇就写到这了,后边还有不少坑要填:保存至文件,异常处理。后边再说。。。。。。。。。。。。
有需要这部分代码的同志可以给我发邮件,大概介绍一下自己,然后说明要这部分代码就好了,当然了,开发者的KEY我可是不会给的,自己去申请吧。邮箱1373415867@qq.com
网友评论