2017-01-11 48 views
-1

我在使用Python 2.7的App引擎中使用urlfetch.fetch。在Python GAE中使用URLFetch獲取完整文檔

我試着抓取屬於2個不同域的2個URL。對於第一個,urlfetch.fetch的結果包含解析用於獲取推薦產品的XHR查詢後的結果。 但是,對於屬於另一個域的其他頁面,XHR查詢未解析,我只是簡單地獲取純HTML。此頁面的XHR查詢也爲獲得推薦產品展示的目的而製作等

這是我如何使用網址抓取: fetch_result = urlfetch.fetch(URL,截止= 5,validate_certificate = TRUE)

URL 1(就是XHR得到解決,響應完成) https://www.walmart.com/ip/HP-15-f222wm-ndash-15.6-Laptop-Touchscreen-Windows-10-Home-Intel-Pentium-Quad-Core-Processor-4GB-Memory-500GB-Hard-Drive/53853531

URL 2(就是我剛剛得到大部分純HTML) https://www.flipkart.com/oricum-blue-486-loafers/p/itmezfrvwtwsug9w?pid=SHOEHZWJUMMTEYRU

可有人請諮詢我可能錯過的不一致之處。

+0

urlfetch無法在頁面上執行JavaScript腳本幷包含其結果。是什麼讓你認爲urlfetch在結果中包含了xhr請求的結果? – snakecharmerb

+0

您可以爲我指定的URL1執行urlfetch.fetch,並將其輸出與瀏覽器中的HTML源進行比較。你會看到內容是不同的。部分差異來自頁面上顯示的其他產品 - 這是通過XHR從Chrome開發者控制檯獲取的。很明顯,我沒有想到urlfetch.fetch會執行JS等,但在這種情況下有點驚訝,它的結果似乎不同於純HTML源內容。 – user6781569

回答

0

服務器根據請求頭中提供的用戶代理字符串提供不同的輸出。

默認情況下,urlfetch.fetch將發送用戶代理標頭設置爲AppEngine-Google; (+http://code.google.com/appengine; appid: myapp.appspot.com之類的請求。

瀏覽器會發送一個用戶代理標題是這樣的:Mozilla/5.0 (X11; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0

如果您覆蓋默認的標題爲urlfetch.fetch

headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0'} 
urlfetch.fetch(url, headers=headers) 

你會發現,您收到的HTML是幾乎相同的服務到瀏覽器。

相關問題