百度批量算路功能使用

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 百度批量算路功能使用

平时我们需要批量获取百度导航的数据,但有时候大量获取时间较慢。百度给开发者,提供了对接API的获取数据功能。(现额度已降低至每天5000,22年8月之前是每天30000额度)如果某个项目如果试用的比较多,可以进行额度申请,可以提供使用额度。

百度开发者文档

所有API获取数据都有对应的文档。以下是批量算路的文档,其对应的参数都很详细。

快速获取距离矩阵数据

现需要获取50个点,两两之间的距离矩阵和时间矩阵数据。使用百度批量算路功能获取该数据。

网点数据

基础代码介绍

我用了4个AK码,2分钟爬完了50*50=2500条数据。若能提高百度并发,其爬取时间可以更快,但是AK码并发上限是30(更高的并发需要花钱或者个人去申请)。

对应爬取之后的数据:距离矩阵50*50

对应爬取之后的数据:时间矩阵50*50

函数说明1:获取百度批量算路的数据,如果爬的太快百度会限制,自动停一秒换下一个AK码(可以多用几次try,except)

#获取百度批量算路的数据
def baidu_pl(p,q,AK):
    tm.sleep(1)
    url_drive="https://api.map.baidu.com/routematrix/v2/driving?output=json&tactics=11&origins=\
{}&destinations={}&ak={}".format(p,q,AK)
    try:
        result_drive=json.loads(urlopen(url_drive).read())
        dis=[]
        time=[]
        for i in range(len(result_drive['result'])):
            dis.append(result_drive['result'][i]['distance']['value']/1000)
            time.append(result_drive['result'][i]['duration']['value']/3600)
    except:
            tm.sleep(1)
            url_drive="https://api.map.baidu.com/routematrix/v2/driving?output=json&tactics=11&origins=\
{}&destinations={}&ak={}".format(p,q,AKall[0%len(AKall)])
            result_drive=json.loads(urlopen(url_drive).read())
            dis=[]
            time=[]
            for i in range(len(result_drive['result'])):
                dis.append(result_drive['result'][i]['distance']['value']/1000)
                time.append(result_drive['result'][i]['duration']['value']/3600)                               
    return  dis,time

函数说明2:把查询完的数据按矩阵的形式输出至行列,一次查29个(百度免费版上限是30)

def plchaxun(df,m):
    q=''
    q1=''
    y=len(df)-1
    rr=29#系数,一次查多少个
    p=str(df.纬度[m])+','+str(df.经度[m])
    if y+1<rr :
        for mm in range(0,y):
            q+=str(df.纬度[mm])+','+str(df.经度[mm])+"|"
        q=q+str(df.纬度[y])+','+str(df.经度[y])
        dis0,time0=baidu_pl(p,q,AK)
    elif (y+1)%rr>0:
        dis0=[]
        time0=[]
        for i in range((y+1)//rr):
            q2=''
            for mm in range(rr*i,rr*(i+1)-1):
                q2+=str(df.纬度[mm])+','+str(df.经度[mm])+"|"
            q2=q2+str(df.纬度[rr*(i+1)-1])+','+str(df.经度[rr*(i+1)-1])
            #print(q2)
            disu,timeu=baidu_pl(p,q2,AK)
            dis0+= disu
            time0+=timeu
        for pp in range(((y+1)//rr)*rr,y):
            q1+=str(df.纬度[pp])+','+str(df.经度[pp])+"|"
        q1=q1+str(df.纬度[y])+','+str(df.经度[y])
        disu1,timeu1=baidu_pl(p,q1,AK)
        dis0+= disu1
        time0+=timeu1
    else:
        dis0=[]
        time0=[]
        for i in range((y+1)//rr):
            q2=''
            for mm in range(rr*i,rr*(i+1)-1):
                q2+=str(df.纬度[mm])+','+str(df.经度[mm])+"|"
            q2=q2+str(df.纬度[rr*(i+1)-1])+','+str(df.经度[rr*(i+1)-1])
            disu,timeu=baidu_pl(p,q2,AK)
            print('123'+str(i))
            dis0+= disu
            time0+=timeu
    #print(dis0)
    return dis0,time0

函数说明3:查询完的数据按矩阵形式输出至行列

for kname in name:
    df=pd.read_excel('0.经纬度坐标\网点经纬度.xlsx',sheet_name=kname)
    df1 =pd.DataFrame(0.01, index=range(len(df)), columns=range(len(df)))
    df2 =pd.DataFrame(0.01, index=range(len(df)), columns=range(len(df)))
    for i in range(0,len(df)):
        AK=AKall[i%len(AKall)]
        dis1, time1=plchaxun(df,i)
        df1.iloc[i,:]=dis1
        df2.iloc[i,:]=time1
        #print(i,AK)
    df1.columns=df.网点名称
    df1.index=df.网点名称
    df2.columns=df.网点名称
    df2.index=df.网点名称
    print(kname+'完成')
    df1.to_excel("1.距离及时间矩阵/disbd"+kname+".xlsx")
    df2.to_excel("1.距离及时间矩阵/timebd"+kname+".xlsx")

批量算路要比一个个爬距离快很多,另外有些参数可以根据实际情况自行选取。

本文选的是常规路线。


目录
相关文章
|
1月前
|
小程序 机器人 开发者
QQ 小程序已发布,但无法被搜索的解决方案
我的 QQ 小程序在 2024 年 8 月就已经审核通过,上架后却一直无法被搜索到。打开后,再在 QQ 上下拉查看 “最近使用”,发现他出现一下又马上消失。
46 2
|
2月前
|
数据采集 Web App开发 JSON
爬虫实战小案例—获取喜马拉雅账号的关注数据和粉丝数据生成电子表格并实现批量关注或者取关然后生成表格文件
爬虫实战小案例—获取喜马拉雅账号的关注数据和粉丝数据生成电子表格并实现批量关注或者取关然后生成表格文件
65 0
|
7月前
|
数据采集 搜索推荐 数据挖掘
使用Python制作一个批量查询搜索排名的SEO免费工具
最近工作中需要用上 Google SEO(搜索引擎优化),有了解过的朋友们应该都知道SEO必不可少的工作之一就是查询关键词的搜索排名。关键词少的时候可以一个一个去查没什么问题,但是到了后期,一个网站都有几百上千的关键词,你再去一个一个查,至少要花费数小时的时间。 虽然市面上有很多SEO免费或者收费工具,但免费的基本都不能批量查,网上免费的最多也就只能10个10个查询,而且查询速度很慢。收费的工具如Ahrefs、SEMrush等以月为单位收费最低也都要上百美刀/月,当然如果觉得价格合适也可以进行购买,毕竟这些工具的很多功能都很实用。今天我给大家分享的这个排名搜索工具基于python实现,当然肯定
120 0
|
7月前
|
Python SEO
使用python制作一个批量查询搜索排名的SEO免费工具1.0版
使用python制作一个批量查询搜索排名的SEO免费工具1.0版
72 1
使用python制作一个批量查询搜索排名的SEO免费工具1.0版
|
7月前
|
前端开发 JavaScript 应用服务中间件
百度搜索:蓝易云【服务器如何配置支持history模式】
配置完毕后,服务器将会将所有请求重定向到你的应用的index.html文件,使得history模式能够正常运行。这样,当用户在浏览器中直接访问子路径时,服务器会正确地返回index.html,并由前端路由接管处理。
96 1
|
搜索推荐
在线网络搜索
在线网络搜索是指通过互联网连接到远程服务器,使用搜索引擎对网络上的信息进行检索和查找。这种搜索方式是我们日常生活中最常用的搜索方式。在线网络搜索可以帮助用户在短时间内找到大量相关的信息,提高信息获取的效率。以下是在线网络搜索的使用方法、适用场景和示例:
273 8
|
PHP
漏刻有时采用php常用get提交搜索关键词的注意事项
漏刻有时采用php常用get提交搜索关键词的注意事项
63 0
|
搜索推荐 API 索引
2023年最新批量百度添加二级域名工具
大局部新站的蜘蛛量十分异常而且有时分会越来越少,关于有收录来说,会时不时的掉收录,十分不稳定, 需求友谊链接才干持续给站点增加蜘蛛量 让收录持续增长
218 0
2023年最新批量百度添加二级域名工具
|
数据采集 Python
Python爬虫系列17-批量抓取某短视频平台某用户的全部作品
不那么好走的路,才是上坡路. 所有往上的路,都与我们本能的懒惰、懈怠和拖延不相容。 当你觉得很苦很累时,不要泄气,因为你可能走在上坡的路上。
Python爬虫系列17-批量抓取某短视频平台某用户的全部作品
|
云安全 安全 应用服务中间件
【1月】阿里云 APP 发新版啦!新增实例搜索、漏洞在线修复等五大功能
阿里云 APP 发新版啦!我们决定从现在起,在这边告知大家每次版本的功能更新的最新消息。下面小编将带着大家一起去发现和使用新增实例搜索、漏洞在线修复等五大功能~~
5738 1
【1月】阿里云 APP 发新版啦!新增实例搜索、漏洞在线修复等五大功能