2017-07-17 83 views
0

我想從this site獲取數據。python-requests讓我在瀏覽器中看到不同的反應,爲什麼?

當我從主網址獲取數據。我得到一個包含結構但不包含值的HTML文件。

import requests 
from bs4 import BeautifulSoup 

url ='http://option.ime.co.ir/' 
r = requests.get(url) 
soup = BeautifulSoup(r,'lxml') 
print(soup.prettify()) 

我發現,該網站從

url1 = 'http://option.ime.co.ir/GetTime' 
url2 = 'http://option.ime.co.ir/GetMarketData' 

獲取值當我觀看在瀏覽器網址那些迴應。我以特定的格式看到JSON格式的響應和時間。

但是當我使用請求獲取數據時,它給了我從url獲得的相同的HTML。

你知道最新的原因嗎?我應該如何獲得我在瀏覽器中看到的回覆?

我檢查所有網址的標題,但沒有找到與我的請求一致的特殊內容。

+0

你怎麼能說標題沒有用?這是關於標題的東西。 –

+0

檢查用戶代理字段是否不同,通常可以根據客戶端類型獲取不同的響應。 – thorhunter

+0

@Ujival我沒有說頭文件沒有用,我說我找不到任何有用的東西:) – Mehdi

回答

0

您必須在請求中提供正確的HTTP標頭。在我的情況下,我能夠使用以下標題使其工作。請注意,在我測試中,HTTP響應是200 OK,而不是重定向到根網站(因爲請求中未提供HTTP標頭)。

原始HTTP請求:

GET http://option.ime.co.ir/GetTime HTTP/1.1 
Host: option.ime.co.ir 
Referer: "http://option.ime.co.ir/" 
Accept: "application/json, text/plain, */*" 
User-Agent: "Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0" 

這應該給你你需要正確的JSON響應。

+0

不,我嘗試添加這些http請求到我的get請求結果是一樣的,我使用Postman擴展和python他們都沒有給我JSON。 – Mehdi

0

您首先使用瀏覽器進行連接獲取302重定向響應(對於相同的url)。

然後它運行一些JS,所以第二個請求不再重定向,並獲得預期的JSON。

這是一種常用的技術,所以其他人在未經許可的情況下不使用他們的API。

在dev中設置「保存日誌」複選框。工具,所以你可以自己看到它。

+0

有沒有什麼方法可以得到這些數據?我設置保留日誌「複選框,但沒有任何更改 – Mehdi

+0

設置保留日誌,然後刷新。您將所有請求發送到服務器。不,服務器具有相同的原始策略,所以除非您使用代理,否則無法通過它 – JuanGG

相關問題