百度API获取地点经纬度

使用python调用百度地图API获得指定地点的经纬度

参考文章:https://www.cnblogs.com/zealousness/p/8303645.html

使用本文,发现一个问题,作者提供的key可以正常调用API,但是自己的key和同事的key却不行。

百度一把,发现作者的url是旧版本的,现在已升级到V3,因此url位置需要重新拼接。

官方指导文档如下:http://lbs.baidu.com/index.php?title=webapi/guide/webservice-geocoding

更新后代码段如下:

import json
from urllib.request import urlopen,quote
import pandas as pd
import time

#http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation



def p2l(name):
    # 1、设置url和3个参数(输出格式,key,要翻译的地址)
    url = 'http://api.map.baidu.com/geocoding/v3/'
    output = 'json'

    # ak = 'sXZHPZahdMeK3Gy3uC7ZeRQrVXXXXXXX'
    ak = '8fRDBDKqn4BYByCymMXf0OHf7XXXXXXX'  #此key打码,请申请自己的key替换掉
    address = quote(name)

    # 2、拼接get请求(url?参数1=值1&参数2=值2&参数3=值3)
    request = url + '?' + 'address=' + address + '&output=' + output + '&ak=' + ak 

    # 3、urlopen发送请求,获得response
    response_file = urlopen(request)

    # 4、读取response字符串
    response_str = response_file.read().decode()

    # 5、str转json
    response_json = json.loads(response_str)
    # print(response_json)

    # 6、读json,
    lat=response_json['result']['location']['lat']
    lng=response_json['result']['location']['lng']

    return [lat,lng]

name = '河北省 石家庄 中山东路 北国商城'
# name = input()
print(p2l(name))

关于百度API

  1. 使用爬虫时,要注意设定间隔时间,避免给服务器造成太大负荷。可惜没在官方文档上找到最大请求数。问同事说,百度API的逆地理API美秒最多160次。我加入了time.sleep(0.01),设定了间隔,美秒发出的请求不超过100条。
  2. 注册key的时候,正常的脚本开发选择“浏览器”选项

最后,附上本次的使用心得:
因为是批量查询地点的缘故。本次脚本前期没有写纠错机制。很多时候,查询的链接或多或少会出点问题,比如网络波动引发的超时报错。调用api的语句,一定记得写在try...except语句中。这样,一条查询出问题也可以继续查询后续的数据。
试想,如果没有纠错机制,手中共有8万条数据需要查询,当等待了数十分钟,查询了6万多行时,程序抛出错误,前面的数据也没有及时写入文件,那么除了要补上纠错语句,还得花费大力气去寻找异常位置。对时间和精力都是巨大的消耗。

posted @ 2020-12-03 18:00  菲克纽斯  阅读(756)  评论(2编辑  收藏  举报