urllib2 的结果与网络浏览器的结果不同
urllib2's result differs from that of a web browser
我正在 aws-lambda
中编写函数。功能很简单。它只是从特定网站获取请求。
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&qid=1505293516&sr=8-1&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
形式。
尝试传递 User-Agent
header:
import urllib2
def lambda_handler(...):
request = urllib2.Request("http://www.google.com",
headers={"User-Agent" : "Mozilla/5.0"})
return urllib2.urlopen(request).read()
您需要将响应传递给字符串函数:
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
我正在 aws-lambda
中编写函数。功能很简单。它只是从特定网站获取请求。
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&qid=1505293516&sr=8-1&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
形式。
尝试传递 User-Agent
header:
import urllib2
def lambda_handler(...):
request = urllib2.Request("http://www.google.com",
headers={"User-Agent" : "Mozilla/5.0"})
return urllib2.urlopen(request).read()
您需要将响应传递给字符串函数:
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