首页 > 其他分享 >大数据——调用百度地图接口进行规范

大数据——调用百度地图接口进行规范

时间:2024-03-25 23:13:00浏览次数:26  
标签:调用 get url 接口 json result print data 百度

import urllib.request, urllib.parse, urllib.error
import json
import hashlib
import numpy as np
import pandas as pd

MyAK = ''
MySK = ''

lat=0.0
lng=0.0
#处理得到url
def get_url(name):
    #GET请求 http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation
    queryStr = '/geocoding/v3/?address={}&output=json&ak={}'.format(name,MyAK)
    # 对queryStr进行转码,safe内的保留字符不转换
    encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    # 在最后追加sk
    rawStr = encodedStr + MySK
    # 计算sn
    sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())
    #由于URL里面含有中文,所以需要用parse.quote进行处理,然后返回最终可调用的url
    url = urllib.parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")
    print('URL:', url)
    return url

#得到json数据
def get_json(url):
    # 从API读取数据
    req = urllib.request.urlopen(url)
    res = req.read().decode()

    # 解析数据
    try:
        # 将 JSON 对象转换为 Python 字典
        json_data = json.loads(res)
    except:
        json_data = "地址未知"
    if not json_data or 'status' not in json_data or json_data['status'] != 0:
        print('json数据获取失败',json_data['status'])
    '''else:
        #输出Json数据
        print(json.dumps(json_data, indent=4, ensure_ascii=False))'''
    return json_data

# 获取经纬度坐标
def get_lnglat(json_data):
    #Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global
    global lat,lng
    lat = json_data["result"]["location"]["lat"]
    lng = json_data["result"]["location"]["lng"]
    # print('纬度', lat, '经度', lng)

def get_url2(lat,lng):
    #GET请求 http://api.map.baidu.com/reverse_geocoding/v3/?ak=您的ak&output=json&coordtype=wgs84ll&location=31.225696563611,121.49884033194
    queryStr = '/reverse_geocoding/v3/?ak={}&output=json&coordtype=wgs84ll&location={},{} '.format(MyAK,str(lat),str(lng))
    # 对queryStr进行转码,safe内的保留字符不转换
    encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    # 在最后追加sk
    rawStr = encodedStr + MySK
    # 计算sn
    sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())
    #由于URL里面含有中文,所以需要用parse.quote进行处理,然后返回最终可调用的url
    url = urllib.parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")
    #print('URL:', url)
    return url

# 解析Json数据
def get_info(json_data):
    if json_data != "地址未知":
        province = json_data.get("result", {}).get("addressComponent", {}).get("province", "未知")
        city=json_data["result"]["addressComponent"]["city"]
        district=json_data["result"]["addressComponent"]["district"]
        # adcode=json_data["result"]["addressComponent"]["adcode"]
        # print("地理:",province+city+district)
        result = province+city+district
    else:
        result = json_data
    return result
    # print("行政代码:"+adcode)

if __name__ == '__main__':
    #得到经纬度

    # 读取csv文件单位地区数据
    df = pd.read_csv("result_table01.csv",encoding='utf-8')
    data = df[['单位']]
    data = data.fillna("0")
    data_array = np.array(data.stack())  # 首先将pandas读取的数据转化为array
    data_list = data_array.tolist()  # 然后转化为list形式
    #print(data_list)
    print(len(data_list))

    # 将各个单位名称存储为一个列表形式
    url = []
    for i in range(0,len(data_list)):
        result =data_list[i]
        #print(result)
        url.append(result)
    # print(url)

    rr = []
    city = []
    province = []
    direct = []

    for i in range(0, len(url)):
        try:
            uu = get_url(url[i])
            json_data = get_json(uu)
            status = json_data.get('status')
            if status == 0:
                lnglat = get_lnglat(json_data)
                uu2 = get_url2(lat, lng)
                json_data = get_json(uu2)
                m = get_info(json_data)
                rr.append(m)
            elif status in [1, 2, 3]:
                print(f"跳过处理,状态码为 {status}")
                rr.append("状态码异常")
            else:
                print(f"未处理的状态码:{status}")
                rr.append("未处理的状态码")
        except Exception as e:
            print(f"处理数据时发生异常:{e}")
            rr.append("数据异常")
    df['地域维度'] = rr

    df.to_csv("result_table02.csv", index=False)

    print("地域维度清洗成功!")

标签:调用,get,url,接口,json,result,print,data,百度
From: https://www.cnblogs.com/lin513/p/18095623

相关文章

  • C++调用C# (使用C++/CLI)
    简介C++/CLI简介见上文 C#调用C++(使用C++/CLI)-咸鱼翻身?-博客园(cnblogs.com)新建解决方案->CPlusCSharpSolution新建C#类库->CSharpNative新建类NativeCalculate1publicclassNativeCalculate2{3publicintAdd(inta,intb)4{......
  • C#调用C++ (使用C++/CLI)
    简介C++/CLI(C++CommonLanguageInfrastructure)是一种允许在.NET平台上创建托管代码(managedcode)和非托管代码(unmanagedcode)之间互操作的语言。其原理可以概括如下:编译器支持:C++/CLI编译器能够编译同时包含托管和非托管代码的源文件。这使得在同一个项目中可以混合使用......
  • Java面试题:什么是Java中的接口?与抽象类有什么区别?
    一、什么是Java中的接口?与抽象类有什么区别?Java中的接口(Interface)是一种引用类型,类似于类,用于存放抽象方法和静态常量。接口定义了一个规范,规定了实现接口的类应具备哪些方法。它是一种完全抽象的类型,不能直接实例化,必须由其他类来实现(implements)接口,并提供接口方法的具体......
  • 一文搞懂JavaEE的接口
    在JavaEE(JavaEnterpriseEdition)开发环境中,编程意义上的“接口”(interface)和API接口虽然都涉及接口的概念,但它们属于不同层面的术语。1.编程意义上的“接口”(interface)在Java编程语言中,接口(interface)是一种引用类型,它是方法的集合,这些方法被定义在接口中,但没有实现(即没有方法......
  • 掌握C#中异步魔法:同步方法如何优雅调用异步方法
     概述:上述C#示例演示了如何在同步方法中调用异步方法。通过使用`async`和`await`关键字,实现了同步方法对异步方法的调用。建议使用`await`而不是`Result`来避免潜在的死锁问题。这种模式在处理异步任务时能够提高代码的可读性和性能。在C#中,从同步方法调用异步方法的过程涉及......
  • 基于word2vec+LSTM模型实现百度贴吧恶意评论预测
        大家好,我是带我去滑雪!    Word2Vec模型能够将词语映射到高维空间中的向量表示,同时保留了词语之间的语义信息和上下文关系。这使得模型能够更好地理解评论中的语境和含义。LSTM模型是一种适用于处理序列数据的深度学习模型,能够有效处理文本数据中的变长序列......
  • 三要素核验身份证号、姓名和人像是否匹配的身份证实名认证接口
    在开发的过程中,总会用到各种各样的API接口来实现各种各样的功能。互联网信息时代,为确保注册用户身份信息的正确性,无论是手机端还是电脑端应用都需要进行实名认证来防止虚假身份的使用,维护公共利益和个人权益的安全,实名认证已经成为了一个非常重要的环节。翔云身份证实名......
  • 身份证查询接口-各类要素身份证实名认证接口
    身份证实名认证接口,根据身份证姓名和身份证号码、证件人像核对身份信息是否一致,核验个人网络身份真伪。身份证实名认证接口不限性别、不限年龄、不限民族。可与身份证OCR技术灵活融合,返回为0,表示为同一人,返回为1,表示认为不是同一个人。翔云身份证实名认证接口返回值参数......
  • NAPI :创建头文件,调用so库中方法报错:undefined symbol: box_get_auth_count()
    报错信息使用的头文件#ifndefauthorization_H#defineauthorization_H...intbox_get_auth_count();...#endif//authorization_H错误原因找不到box_get_auth_count,建议使用extern"C"extern“C”申明下面的方法用C编译解决方法使用的头文件#ifn......
  • javascript三要素核验身份证号、姓名和人像是否匹配的身份证实名认证接口
    在开发的过程中,总会用到各种各样的API接口来实现各种各样的功能。互联网信息时代,为确保注册用户身份信息的正确性,无论是手机端还是电脑端应用都需要进行实名认证来防止虚假身份的使用,维护公共利益和个人权益的安全,实名认证已经成为了一个非常重要的环节。翔云身份证实名认......