python结合C# + ArcEngine代码爬取百度兴趣点数据生成矢量地图展示

一、先申请百度开发者AK码

二、由于百度opi查询每页只能返回20条记录,最多查询20页,所以超出400条记录就查询不了。因此下面我们用分块切割法,一块块的查询,这样可以查询到超出400条记录数据。

       分块切割法,需要知道爬取数据底图的左下角和右上角的坐标。本次我通过91地图查询到分块的坐标。

三、使用python代码编辑器编写代码程序

# -*- coding: utf-8 -*-
# Python 2.7
import urllib2  
import json   
import codecs
import arcpy, sys, os, string,glob
reload(sys)
sys.setdefaultencoding("utf-8")


left_bottom = [106.6634,26.5899];
right_top = [106.7547,26.65757];
part_n = 2;#切片数量

url0 = 'http://api.map.baidu.com/place/v2/search?';
x_item = (right_top[0]-left_bottom[0])/part_n;
y_item = (right_top[1]-left_bottom[1])/part_n;
query = '饭店'; #趴取贵州省云岩区餐饮饭店数据
path = r"C:\Users\Administrator\Desktop\b.txt" #保存的文档路径
ak = 'qbD************'; #百度ak
n = 0; # 页码
f = codecs.open(path, 'a', 'utf8')#打开写完的文档
for i in range(part_n):
    for j in range(part_n):
        left_bottom_part = [left_bottom[0]+i*x_item,left_bottom[1]+j*y_item];
        right_top_part = [right_top[0]+i*x_item,right_top[1]+j*y_item];
        for k in range(20):
            url = url0 + 'query=' + query + '&page_size=20&page_num=' + str(k) + '&scope=1&bounds=' + str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]) + ','+str(right_top_part[1]) + ',' + str(right_top_part[0]) + '&output=json&ak=' + ak;      
            data = urllib2.urlopen(url);
            hjson = json.loads(data.read());
            if hjson['message'] == 'ok':
                results = hjson['results'];          
                for m in range(len(results)):         
                    f.write(str(results[m]).decode('unicode_escape'))#注意decode('unicode_escape')这个是unicode转成中文,这里不能忽略掉否则导出结果中文会
                    print(str(results[m]).decode('unicode_escape'));
        n += 1;
        print '完成第',str(n),'块切片'
f.close()#关闭写完的文档

四、爬取的结果数据保存为json格式

五、解析成果转成shp数据在arcmap上展示

在上面的json数据中,我们可以看到有兴趣点的名称和位置坐标,可以通过代码json解析提取,json解析成shp数据部分我使用的是C#代码和arcengine接口结合。

六、成果展示,将生产的shp数据展示在arcmap上

七、总结

以上就是我对爬取百度POI(兴趣点)数据的经历,GIS兴趣爱好者可加我qq交流 875782548

猜你喜欢

转载自blog.csdn.net/huangguo1688/article/details/86290537
今日推荐