先来爬爬POI

作者: Giser1993 | 来源:发表于2017-05-18 20:03 被阅读979次

    首先呢,先要把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

    相关文章

      网友评论

      • moemoe:求问在运行过程中说没有urllib2这个module是肿么回事~
      • 四爷在此:看到有人问开发者key 是啥,不禁笑了。。:grin:
      • 拿朕的火箭来:😂爬热力图能否指点一二
        Giser1993: @牛里脊 后边有时间再写
      • 029dd44ae460:看上去你就是个厉害的人物
        Giser1993: @朱玮国匠城 😀😀😀😀
      • 9f918262d70f:开发者key是啥😂
        Giser1993: @前秦时 key呀 就是个神奇的东西,就像钥匙一样,你有这个钥匙,你发送的请求服务器才会应答才会返回你要的东西,不然它不搭理你的

      本文标题:先来爬爬POI

      本文链接:https://www.haomeiwen.com/subject/zomsxxtx.html