我正在使用以下網站的請求在 python 中進行網路抓取。
在檢查元素中,當您加載任何燃料型別的資料時,您將看到由 name 觸發的 API getFilteredInventery。
假設您選擇了 Diesel,那么我想抓取在給定 API 的回應部分中可見的所有資料。但我不能簡單地打開它。在標頭部分,您將看到請求有效負載,我想我也將其作為引數發送了。
我上網沖浪,我發現我可以在請求中將請求有效負載作為引數發送。
這是我的代碼:
payload = {"Search": {"FuelType": ["Diesel"]}, "Sort": {"Featured": "true"}}
url = "https://easyauto123.com.au/api/v1/getFilteredInventory"
page = requests.get(url, params=payload)
data = page.json()
但是頁面顯示400錯誤。那么,我怎樣才能解決這個錯誤呢?
API 鏈接:https : //easyauto123.com.au/api/v1/getFilteredInventory
uj5u.com熱心網友回復:
你變體:
page = requests.get(url, params=payload)
試試這個變體:
page = requests.post(url, json=payload)
uj5u.com熱心網友回復:
您在requests庫中發布的代碼示例使用您GET定義的“有效負載”向 URL發出請求,結果轉換為查詢引數并回傳 404。您可以像這樣自己看到這一點:
payload = {"Search": {"FuelType": ["Diesel"]}, "Sort": {"Featured": "true"}}
url = "https://easyauto123.com.au/api/v1/getFilteredInventory"
page = requests.get(url, params=payload)
print(page.url)
# => https://easyauto123.com.au/api/v1/getFilteredInventory?Search=FuelType&Sort=Featured
print(page.status_code)
API 需要一個POST帶有 JSON 負載的請求,這通常在請求期間由Content-Type值為的 HTTP 標頭表示application/json。)該requests庫公開了此功能:
page = requests.post(url, json=payload)
您可以通過request回傳物件的存盤屬性評估用于特定請求的請求標頭:
page = requests.post(url, json=payload)
print(page.request.headers)
# => {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '66', 'Content-Type': 'application/json'
print(page.request.headers['Content-Type'])
# => application/json
您可以將其與以下結果產生的請求進行比較:
page = requests.post(url, params=payload)
print(page.request.url)
# => https://easyauto123.com.au/api/v1/getFilteredInventory?Search=FuelType&Sort=Featured
print(page.request.headers)
# => {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0'}
您可能會注意到此請求成功了,盡管回應主體不同。另外,請注意Content-Length標頭的值為0(vs 66) 并且Content-Type標頭未設定。的Content-Length報頭表示有效載荷,在這種情況下是的大小0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/340122.html
