百度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萬多行時,程序拋出錯誤,前面的數據也沒有及時寫入文件,那么除了要補上糾錯語句,還得花費大力氣去尋找異常位置。對時間和精力都是巨大的消耗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM