我是 python 新手,正在尝试学习一些新模块。幸运或不幸的是,我选择了 urllib2 模块并开始将它与一个给我带来问题的 URL 一起使用。
首先,我创建了 Request 对象,然后在响应对象上调用 Read()。它失败了。结果它被重定向但错误代码仍然是200。不知道发生了什么。这是代码 -
def get_url_data(url):
print "Getting URL " + url
user_agent = "Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1"
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(url, str(headers) )
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
print response.geturl()
print response.info()
print response.getcode()
return False;
else:
print response
print response.info()
print response.getcode()
print response.geturl()
return response
我用http://www.chilis.com调用上述函数。
我期待收到 301、302 或 303,但我看到的是 200。这是我看到的响应——
Getting URL http://www.chilis.com
<addinfourl at 4354349896 whose fp = <socket._fileobject object at 0x1037513d0>>
Cache-Control: private
Server: Microsoft-IIS/7.5
SPRequestGuid: 48bbff39-f8b1-46ee-a70c-bcad16725a4d
X-SharePointHealthScore: 0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 14.0.0.6120
X-MS-InvokeApp: 1; RequireReadOnly
Date: Wed, 13 Feb 2013 11:21:27 GMT
Connection: close
Content-Length: 0
Set-Cookie: BIGipServerpool_http_chilis.com=359791882.20480.0000; path=/
200
http://www.chilis.com/(X(1)S(q24tqizldxqlvy55rjk5va2j))/Pages/ChilisVariationRoot.aspx?AspxAutoDetectCookieSupport=1
有人可以解释这个 URL 是什么以及如何处理吗?我知道我可以使用 Diveintopython.net 中的“处理重定向”部分,但在该页面上的代码中我也看到了相同的响应 200。
编辑:使用来自 DiveintoPython 的代码,我看到它是一个临时重定向。我不明白为什么代码中的 HTTP 错误代码是 200。这不应该是实际的返回代码吗?
EDIT2:现在我看得更清楚了,这根本不是一个奇怪的重定向。我正在编辑标题。
EDIT3:如果 urllib2 自动跟随重定向,我不确定为什么下面的代码没有获得 chilis.com 的首页。
docObj = get_url_data(url)
doc = docObj.read()
soup = BeautifulSoup(doc, 'lxml')
print(soup.prettify())
如果我使用浏览器最终被重定向到它的 URL,它就可以工作(http://www.chilis.com/EN/Pages/home.aspx)。