关于在python中处理重定向
我是python的新手,我正在尝试学习一些新的模块。幸运的是,不幸的是,我拿起urllib2模块,并开始使用它与一个URL导致我的问题。关于在python中处理重定向
首先,我创建了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
有人能解释一下这个网址有,如何处理这个我知道我可以使用从Diveintopython.net“处理重定向”部分也与该网页我看到的代码?相同的反应200.
编辑:使用从DiveintoPython的代码,我看到它的临时重定向。我不明白的是为什么代码中的HTTP错误代码是200.这不是真的返回代码吗?编辑2:现在我看到它更好,它不是一个奇怪的重定向。我正在编辑标题。编辑3:如果urllib2自动执行重定向,我不确定为什么下面的代码没有得到chilis.com的首页。
docObj = get_url_data(url)
doc = docObj.read()
soup = BeautifulSoup(doc, 'lxml')
print(soup.prettify())
如果我使用的浏览器终于结束了被重定向到它的工作原理(http://www.chilis.com/EN/Pages/home.aspx“)。
urllib2
自动跟随重定向的URL,因此,您所看到的信息是,这是该页面。重定向到
如果你不希望它跟随重定向,你需要继承urllib2.HTTPRedirectHandler
这里有一个相关的SO张贴关于如何做到这一点:How do I prevent Python's urllib(2) from following a redirect
关于编辑3:它看起来像www.chilis.com
需要接受cookie。这可以使用urllib2
来实现,但我会建议安装requests
模块(http://pypi.python.org/pypi/requests/)。
下似乎做你想要什么(没有任何错误处理):
import requests
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
print(soup.prettify())
@Martijn谢谢! – R11 2013-02-13 11:36:11