最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用高德地圖API批量獲取地址所屬街道并寫回Excel

 更新時間:2025年11月08日 09:39:08   作者:程序員愛釣魚  
借助 Python + 高德地圖API,我們可以輕松實現(xiàn)自動化批量查詢并將結(jié)果寫入 Excel 文件中,下面就跟隨小編一起來看看具體實現(xiàn)方法與思路吧

在日常的數(shù)據(jù)處理工作中,我們經(jīng)常需要根據(jù)公司、事件或門店的注冊地址,批量獲取其所在的街道信息,例如“浦東新區(qū)張江鎮(zhèn)”“徐匯區(qū)龍華街道”等。 手動查詢顯然低效,而借助 Python + 高德地圖API,我們可以輕松實現(xiàn)自動化批量查詢并將結(jié)果寫入 Excel 文件中。

本文將完整展示一個從 Excel 讀取地址 → 調(diào)用高德API → 獲取街道 → 寫回Excel的實用腳本,并講解實現(xiàn)細節(jié)與優(yōu)化思路。

一、功能概述

這段腳本的功能可以總結(jié)為四步:

  • 從 Excel 文件中讀取地址數(shù)據(jù);
  • 調(diào)用高德地圖地理編碼(geocode)與逆地理編碼(regeo)接口獲取街道名稱;
  • 自動將查詢結(jié)果寫回到 Excel 的新列中;
  • 對查詢失敗的地址進行重試與記錄,保證數(shù)據(jù)盡量完整。

二、項目依賴與準備工作

在開始之前,請確保安裝以下依賴:

pip install pandas openpyxl requests

并在高德開放平臺申請一個 API Key,申請地址為:  lbs.amap.com/api/webservice/guide/create-project

拿到 key 后,將它填入腳本開頭的配置部分:

key = "你的高德API_KEY"

三、核心邏輯講解

1. Excel文件讀取與列處理

腳本使用 pandasopenpyxl 結(jié)合讀取 Excel 文件:

df = pd.read_excel(input_file)
if '注冊地址' not in df.columns:
    df['注冊地址'] = df.iloc[:,16]
addresses = df['注冊地址'].tolist()

這段代碼首先讀取整個 Excel,然后確認是否存在“注冊地址”列; 如果沒有,則自動取第 17 列(索引16)作為地址列,保證兼容不同格式的表格。

隨后,腳本用 openpyxl 打開同一個文件,以保留單元格樣式,準備寫入新的“街道”列:

wb = load_workbook(input_file)
ws = wb.active
ws.insert_cols(target_col)
ws.cell(row=header_row_index, column=target_col, value="街道")

這樣既能讀取數(shù)據(jù),又能保持表格原有格式,方便下游人員直接查看。

2. 調(diào)用高德API獲取街道信息

核心的查詢函數(shù)如下:

def get_street_from_amap(address, retries=max_retries):
    if not isinstance(address, str) or not address.strip():
        return ""
    for attempt in range(1, retries+1):
        try:
            geo_resp = requests.get(
                "https://restapi.amap.com/v3/geocode/geo",
                params={"key": key, "address": address, "city": "上海"},
                timeout=15
            ).json()

            if not geo_resp.get("geocodes"):
                continue

            location = geo_resp["geocodes"][0]["location"]

            regeo_resp = requests.get(
                "https://restapi.amap.com/v3/geocode/regeo",
                params={"key": key, "location": location, "extensions": "base", "radius":500},
                timeout=15
            ).json()

            if regeo_resp.get("regeocode"):
                township = regeo_resp["regeocode"]["addressComponent"].get("township","") or ""
                return township
        except Exception as e:
            print(f"[嘗試 {attempt}/{retries}] 地址查詢失敗: {address}, 錯誤: {e}")
        time.sleep(sleep_time + random.random()*0.5)
    return None

這段邏輯分為兩步:

  • 正向地理編碼(geocode):根據(jù)地址字符串獲取經(jīng)緯度;
  • 逆向地理編碼(regeo):根據(jù)經(jīng)緯度反查街道名稱(township)。

并加入了異常重試機制隨機延時,防止頻繁請求觸發(fā)高德API限流。

3. 批量查詢與緩存優(yōu)化

查詢過程通過循環(huán)實現(xiàn):

cache = {}
failed_addresses = []

for row_idx, addr in enumerate(addresses, start=header_row_index+1):
    if not isinstance(addr,str) or not addr.strip():
        ws.cell(row=row_idx, column=target_col, value="")
        continue
    if addr in cache:
        township = cache[addr]
    else:
        township = get_street_from_amap(addr)
        if township is None:
            failed_addresses.append((row_idx, addr))
            township = ""
        cache[addr] = township
        time.sleep(sleep_time + random.random()*0.5)
    ws.cell(row=row_idx, column=target_col, value=township)

這里有幾個優(yōu)化點:

  • 緩存(cache)機制:如果同一地址出現(xiàn)多次,只請求一次;
  • 延時策略sleep_time + random.random()*0.5,避免被API風控;
  • 實時進度輸出:每50行打印一次進度。

4. 失敗重試與錯誤記錄

對于第一次查詢失敗的地址,腳本會自動發(fā)起第二輪重查:

if failed_addresses:
    print(f"第一次查詢失敗地址共 {len(failed_addresses)} 條,開始自動重查……")
    still_failed = []
    for row_idx, addr in failed_addresses:
        township = get_street_from_amap(addr)
        if township is None:
            still_failed.append((row_idx, addr))
            township = ""
        cache[addr] = township
        ws.cell(row=row_idx, column=target_col, value=township)
        time.sleep(sleep_time + random.random()*0.5)
    failed_addresses = still_failed

最終仍查詢失敗的地址會被寫入單獨的 Excel 文件:

if failed_addresses:
    df_fail = pd.DataFrame([addr for _, addr in failed_addresses], columns=["地址"])
    df_fail.to_excel(failed_file, index=False)

這樣可以方便人工二次處理,比如手動調(diào)整地址格式或補錄缺失信息。

四、運行結(jié)果

執(zhí)行腳本后,控制臺會顯示類似輸出:

已處理 50 行,最近地址:上海市浦東新區(qū)張江路123號 → 張江鎮(zhèn)
已處理 100 行,最近地址:上海市浦東新區(qū)川沙路56號 → 川沙新鎮(zhèn)
第一次查詢失敗地址共 5 條,開始自動重查……
完成,已保存:事件列表-上海浦東-帶街道.xlsx
最終仍失敗的地址已保存到 查詢失敗地址.xlsx

最終輸出文件中會新增一列“街道”,完整保留原有格式:

注冊地址街道
上海市浦東新區(qū)張江路123號張江鎮(zhèn)
上海市浦東新區(qū)川沙路56號川沙新鎮(zhèn)

五、實用建議與擴展方向

批量查詢速度控制

  • 高德API對單IP有請求頻率限制,建議控制每秒請求數(shù)。
  • 若數(shù)據(jù)量大,可考慮多線程+限速隊列模式。

地址清洗預處理

可先對地址進行正則清洗,去掉多余標點、括號、空格等,提高命中率。

多城市適配

當前城市固定為“上海”,可通過參數(shù)配置實現(xiàn)全國適配。

異常日志記錄

建議在重查階段輸出更多日志,例如返回狀態(tài)碼、錯誤類型,方便調(diào)試。

接口替代方案

若數(shù)據(jù)量巨大,可以使用高德地圖的批量地理編碼接口(支持最多 10 條一次),進一步提升效率。

六、總結(jié)

本文通過一個實戰(zhàn)案例展示了如何用 Python + 高德地圖API 實現(xiàn)“批量地址→街道歸屬”的自動化處理。 整個過程涵蓋了數(shù)據(jù)讀取、接口調(diào)用、異常重試、結(jié)果寫回等完整流程,既是一個實用工具腳本,也體現(xiàn)了 Python 在數(shù)據(jù)自動化中的強大能力。

核心亮點:

模塊功能
pandas + openpyxl高效讀取與寫入 Excel
requests調(diào)用高德API進行地理解析
緩存與重試機制提高查詢穩(wěn)定性與速度
自動生成失敗文件方便人工補錄與質(zhì)量控制

如果你日常需要處理大量企業(yè)、門店、事件地址,這個腳本可以幫你節(jié)省大量時間。

到此這篇關于Python使用高德地圖API批量獲取地址所屬街道并寫回Excel的文章就介紹到這了,更多相關Python批量獲取地址內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python sklearn中tsne算法降維結(jié)果不一致問題的解決方法

    python sklearn中tsne算法降維結(jié)果不一致問題的解決方法

    最近在做一個文本聚類的分析,在對文本數(shù)據(jù)embedding后,想著看下數(shù)據(jù)的分布,于是用sklearn的TSNE算法來降維embedding后的數(shù)據(jù)結(jié)果,當在多次執(zhí)行后,竟發(fā)現(xiàn)TSNE的結(jié)果竟然變了,而且每次都不一樣,所以本文就給大家講講如何解決sklearn中tsne算法降維結(jié)果不一致的問題
    2023-10-10
  • 詳解python tcp編程

    詳解python tcp編程

    這篇文章主要介紹了python tcp編程的相關資料,幫助大家更好的理解和學習python tcp編程,感興趣的朋友可以了解下
    2020-08-08
  • Pytorch之Tensor和Numpy之間的轉(zhuǎn)換的實現(xiàn)方法

    Pytorch之Tensor和Numpy之間的轉(zhuǎn)換的實現(xiàn)方法

    這篇文章主要介紹了Pytorch之Tensor和Numpy之間的轉(zhuǎn)換的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Python File readlines() 使用方法

    Python File readlines() 使用方法

    readlines() 方法用于讀取所有行(直到結(jié)束符 EOF)并返回列表,該列表可以由 Python 的 for... in ... 結(jié)構進行處理,如果碰到結(jié)束符 EOF 則返回空字符串,需要的朋友可以參考下
    2018-03-03
  • Python實現(xiàn)爬蟲設置代理IP和偽裝成瀏覽器的方法分享

    Python實現(xiàn)爬蟲設置代理IP和偽裝成瀏覽器的方法分享

    今天小編就為大家分享一篇Python實現(xiàn)爬蟲設置代理IP和偽裝成瀏覽器的方法分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • PyTorch之關于hook機制

    PyTorch之關于hook機制

    這篇文章主要介紹了PyTorch之關于hook機制的理解,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python 操作 MySQL數(shù)據(jù)庫

    Python 操作 MySQL數(shù)據(jù)庫

    這篇文章主要介紹了Python 如何操作 MySQL,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python 占位符的使用方法詳解

    Python 占位符的使用方法詳解

    這篇文章主要介紹了Python 占位符的使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python實現(xiàn)K-means聚類算法并可視化生成動圖步驟詳解

    Python實現(xiàn)K-means聚類算法并可視化生成動圖步驟詳解

    這篇文章主要介紹了Python實現(xiàn)K-means聚類算法并可視化生成動圖,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 快速進修Python指南之文件操作

    快速進修Python指南之文件操作

    這篇文章主要為大家介紹了Java開發(fā)者快速進修Python指南之文件操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12

最新評論

三江| 莎车县| 叶城县| 盖州市| 资源县| 玉田县| 南投县| 珠海市| 天全县| 比如县| 满城县| 呼和浩特市| 天门市| 个旧市| 塔城市| 仁布县| 碌曲县| 壤塘县| 边坝县| 嘉祥县| 盘锦市| 思茅市| 洛南县| 息烽县| 巫溪县| 连城县| 延吉市| 宝坻区| 措美县| 泽州县| 额尔古纳市| 视频| 白河县| 灌南县| 鄂尔多斯市| 拉孜县| 五原县| 昭通市| 福鼎市| 镇原县| 蒙阴县|