2017-02-27 52 views
1

我試圖通過我稱之爲網站檢索響應json數據。Python的網絡刮數據請求錯誤

該網站是這樣的:

WebSite DriveNow

在這個頁面上顯示在地圖上的一些數據。與瀏覽器的調試器可以看我的終點

end point

發送響應數據JSON。

我用這個蟒蛇嘗試刮JSON響應數據:

import requests 
import json 

headers = { 
'Host': 'api2.drive-now.com', 
'X-Api-Key': 'adf51226795afbc4e7575ccc124face7' 
} 
r = requests.get('https://api2.drive-now.com/cities/42756?expand=full', headers=headers) 
json_obj = json.loads(r.content) 

,但我得到這個錯誤:

hostname doesn't match either of 'activityharvester.com'

我怎麼可以檢索這些數據?

感謝

我曾試着撥打端點使用Postam,顯示JSON響應,並傳遞到頭只有主機和API密鑰。結果是我想要的json。但我我嘗試相同的調用到蟒蛇我recive錯誤主機名不匹配「activityharvester.com」

+0

響應示出了 「302找到」 頁面。您需要更正您的腳本 –

+0

我的新代碼出現「不良請求」,它再次在頭文件中添加「User-Agent」:'Mozilla/5.0''。而你的問題與API密鑰無關,否則你會得到''code:403,「message」:「權限被拒絕。 「' –

+1

我已經設置也驗證=假等工作。謝謝你們 – APPGIS

回答

1

我不明白你的腳本,也不是你的問題的兩種。爲什麼兩個請求和三個頭文件?你的意思是這樣嗎?

import requests 
import json 

headers = { 
'User-Agent': 'Mozilla/5.0', 
'X-Api-Key':'adf51226795afbc4e7575ccc124face7', 
} 

res = requests.get('https://api2.drive-now.com/cities/4604?expand=full', headers=headers, allow_redirects=False) 

print(res.status_code, res.reason) 

json_obj = json.loads(res.content) 

print(json_obj) 
+0

林好奇,如果你不明白他的問題,你怎麼能發佈一個答案嗎? – Craicerjack

+0

@Craicerjack我不已瞭解了‘activityharvester.com’是我我不確定OP是否想要檢索單個Json文件,或者找到一個抓取整個網站的方法,無論如何,這個腳本將對他有用。 –

+0

嗨Ettore,抱歉,但我打電話給2個不同的終點這個原因,我想使用的響應數據是由執行內部獲取請求的網站顯示的,所以如果我沒有第一個響應就調用第二個終點,那麼響應就是null,我嘗試了你的代碼,但是我有同樣的錯誤:hostname'api2.drive-now.com'與'activityharvester.com'中的任何一個都不匹配 – APPGIS