Experience 截獲圓通快遞官網物流資訊查詢 API 並實現程式碼
阿新 • • 發佈:2021-07-14
最近幾天都在用圓通快遞官網查快遞,感覺甚至麻煩,於是就有了這篇文章。
我們用 Microsoft Edge 訪問圓通快遞官網 https://www.yto.net.cn/ ,按住 Ctrl + Shift + I 開啟“開發人員工具”,輸入運單號,點選查詢,等待頁面載入完成,此時,在右側的“網路”選項卡中找到 waybill:
點一下:
這樣,就能獲取到網站傳送的請求了,方法為 POST, URL 為 https://www.yto.net.cn/api/trace/waybill ,我們再往下滑到最底部:
這裡就是 POST 的資料了。
至此,可以開始寫程式碼了。在程式碼庫裡翻了半天,試圖想用 Ctrl + C / V 大法完成程式碼的編寫,哎,你說巧不巧,還真有,修改完程式碼,執行一下,報錯了:
發生異常: SSLError HTTPSConnectionPool(host='***.***.***.***', port=***): Max retries exceeded with url: /***/***/*** (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))) During handling of the above exception, another exception occurred: During handling of the above exception, another exception occurred: File "E:\Workplace\VisualStudioCode\***.py", line *, in <module> r = requests.post(url, data = data)
找到如下解決方案:https://www.pythonheidong.com/blog/article/600579/373c5474d5bcada35c3e/ ,一字未改,覆蓋,跑一下,報錯了,再次尋找答案:https://maenze.com/archives/1082 ,加以修改,真不錯,成了。
貼上最終的原始碼(根據 https://www.pythonheidong.com/blog/article/600579/373c5474d5bcada35c3e/ 修改):
import time import requests word = input("請輸入你要查詢的單號:") if word.startswith("YT") or word.startswith("yt") : url = "https://www.yto.net.cn/api/trace/waybill" data = {"waybillNo":word} res = requests.post(url, data = data, verify = True) js = res.json() track = js["data"][0]["traces"] for i in track: timeTemp = float(i["time"] / 1000) #時間戳轉換 tupTime = time.localtime(timeTemp) #時間戳轉換 stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime) #時間戳轉換 print(stadardTime + ":" + i["info"]) else : print("")