zoukankan      html  css  js  c++  java
  • python结合百度api进行地理编码和爬取POI点

    最近一直比较忙老师让写一个时空大数据的申请项目书,我这脑子累成狗也不成啊,唉硬着头皮要上,今天偷点空闲一直想爬取百度地图的数据,一直也没做,今天主要爬取了POI点(北京四环以内的吃饭的地方)和利用python结合百度api进行地理编码的小程序,借鉴网上的大神写的,我python本身还不是够,做一些简单的小爬虫可以,仍然需要努力。关于百度api的ak申请打开下面的网址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi开始来代码

    放两张图:

    一、关于百度api的一些问题

    1、应用类别要选择浏览器

    2、Referer白名单:这里面写成通配符即可就是(*)单独一个*

    二、调用百度地理编码的全部代码

    import pandas as pd
    import json
    import csv
    from urllib.request import urlopen, quote
    import requests
    
    #获取城市的地理编码
    def getlnglat(address): 
        url = 'http://api.map.baidu.com/geocoder/v2/'
        output = 'json' 
        ak = '你申请的AK' 
        add = quote(address) #由于本文城市变量为中文,为防止乱码,先用quote进行编码 
        uri = url + '?' + 'address=' + add + '&output=' + output + '&ak=' + ak 
        req = urlopen(uri)
        res = req.read().decode() #将其他编码的字符串解码成unicode temp = json.loads(res) #对json数据进行解析 return temp
        #print(req)
        temp = json.loads(res) #对json数据进行解析
        print(temp)
        return temp
    
    
    file = open(r'C:UsersAdministratorDesktop高校point.json','w') #建立json数据文件
    with open(r'C:UsersAdministratorDesktop高校university.csv', 'r',encoding='UTF-8') as csvfile: #打开csv 
        reader = csv.reader(csvfile) 
        for line in reader: #读取csv里的数据 # 忽略第一行 
            if reader.line_num == 1: #由于第一行为变量名称,故忽略掉 
                continue # line是个list,取得所有需要的值 
            b = line[1].strip() #将第一列city读取出来并清除不需要字符 
            c= line[4].strip()#将第二列price读取出来并清除不需要字符 
            lng = getlnglat(b)['result']['location']['lng'] #采用构造的函数来获取经度 
            lat = getlnglat(b)['result']['location']['lat'] #获取纬度 
            str_temp = '{"count":' + str(b) +',"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":' + str(c) +'},' 
            print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上 
            file.write(str_temp) #写入文档 
    file.close() #保存
    
    
    
    
    

    这个可以做一些热力图,聚合效果看你需要保存成一定的数据

    三、爬取POI点数据

    # -*- coding: utf-8 -*-
    # Python 2.7
    # 提取城市的POI点信息并将其保存至MongoDB数据库
    import urllib.request as urllib2
    import pandas as pd
    import json
    from urllib.request import urlopen, quote
    left_bottom = [116.282387,39.835862];  # 设置区域左下角坐标(百度坐标系)
    right_top = [116.497405,39.996569]; # 设置区域右上角坐标(百度坐标系)
    part_n = 2;  # 设置区域网格(2*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 = quote('饭店'); #搜索关键词设置,转换中文
    ak = '你申请的AK'#百度地图api信令
    n = 0; # 切片计数器
    file = open(r'C:UsersAdministratorDesktop高校point.json','w') #建立json数据文件
    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']; 
                    data=list(map(lambda m:(results[m]["name"],results[m]["address"],results[m]["location"]["lat"],results[m]["location"]["lng"]),range(len(results))))
                    data=pd.DataFrame(data);
                    data.to_csv('C:\Users\Administrator\Desktop\高校\3.csv',header=False,index=False,mode='a+')
                    print(data)
            n += 1;
            print ('第'+str(n)+'个切片入库成功')
    
    
    

    这个我存成csv当然你也可以存到数据库中

    四、应用

    改天更新。。。。

  • 相关阅读:
    MSComm控件进行串口编程的基本步骤(转载)
    Linux C Socket编程原理及简单实例(转载)
    ubuntu14.04英文环境下安装中文输入法(转载)
    2015高工机器人年会第一批100名参会嘉宾名单公布
    中国式人机协作
    优傲机器人:协作机器人助力电子制造业智能转型
    netty学习笔记
    画图模板
    文本建模
    自定义IP协议
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752326.html
Copyright © 2011-2022 走看看