1. 程式人生 > 其它 >Experience 截獲圓通快遞官網物流資訊查詢 API 並實現程式碼

Experience 截獲圓通快遞官網物流資訊查詢 API 並實現程式碼

最近幾天都在用圓通快遞官網查快遞,感覺甚至麻煩,於是就有了這篇文章。

我們用 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("")