2017-09-13 110 views
1

我在aws-lambda中寫了一個函數。該功能很簡單。它只是從特定網站獲取請求。urllib2的結果與網絡瀏覽器的結果不同

python2中的Lambda函數如下所示。也包括import urllib2

def lambda_handler(event, context): 
    # TODO implement 
    url = "https://www.amazon.co.jp/s/field-keywords=4548967337259" 
    response = urllib2.urlopen(url) 
    #print response 

    return response.read() 

我把返回值給我ruby on rails服務器,並試圖解析了必要的信息。

在網站上,標籤和相關信息如下所示。

<a class="a-link-normal a-text-normal" target="_blank" 
rel="noopener" href="https://www.amazon.co.jp/GOTHAM- 
%E3%82%B5%E3%83%BC%E3%83%89-%E3%82%B7%E3%83%BC%E3%82%BA%E3%83%B3- 
%E3%83%96%E3%83%AB%E3%83%BC%E3%83%AC%E3%82%A4- 
%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3%83%88- 
%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9-Blu-ray/dp/B071K5VZTL/ref=sr_1_1? 
ie=UTF8&amp;qid=1505293516&amp;sr=8-1&amp;keywords=4548967337259"> 

但是,如果我拿response和使用read()方法來傳輸,它看起來像這樣。

<a class=\"a-link-normal a-text-normal\" target=\"_blank\" rel=\"noopener\" 
href=\"https://www.amazon.co.jp/GOTHAM-%E3%82%B5%E3%83%BC%E3%83%89- 
%E3%82%B7%E3%83%BC%E3%82%BA%E3%83%B3- 
%E3%83%96%E3%83%AB%E3%83%BC%E3%83%AC%E3%82%A4- 
%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3%83%88- 
%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9-Blu-ray/dp/B071K5VZTL\"> 

爲什麼會發生這種情況,我該如何避免這種情況?

其實我想是這樣response.json()但無法作出json形式完全。

回答

1

嘗試傳遞User-Agent頭:

import urllib2 

def lambda_handler(...): 
    request = urllib2.Request("http://www.google.com", 
          headers={"User-Agent" : "Mozilla/5.0"}) 
    return urllib2.urlopen(request).read() 
+0

你能解釋一下用頭,沒有它的區別? –

+0

@ jh.shin你可以「欺騙」服務器,認爲你是一個Web瀏覽器。沒有它似乎它會爲您提供不同的內容。 –

0

您需要通過響應字符串函數:

def lambda_handler(event, context): 
    url = "https://www.amazon.co.jp/s/field-keywords=4548967337259" 
    response = urllib2.urlopen(url) 
    return str(response.read()) #here, casting as a string 
+0

'response.read()'和將它轉換爲一個字符串有什麼很大的區別? –

相關問題