您好,针对“Python中使用urllib2防止302跳转”的问题,这里为您提供以下完整攻略:
1. 什么是302跳转
302 Found是指请求的文档已被临时移动到新的URL下,但页面的内容、URL等方式都保持不变。主要原因有两个:一是在跳转到新的URL时希望保持搜索引擎的收录等信息不变,新的URL只是为了更好的用户体验而设置的。
2. Python 中使用 urllib2 解决 302 跳转
Python通过urllib2库来访问HTTP/HTTPS的资源,通过HTTPRedirectHandler类可以很好的处理网页的重定向跳转问题,完整代码如下:
import urllib2
def urlopen(url):
urlreq = urllib2.urlopen(url)
if urlreq.getcode() == 200:
result = urlreq.read()
elif urlreq.getcode() == 302:
newurl = urlreq.getheader('Location')
urlreq = urllib2.urlopen(newurl)
result = urlreq.read()
return result
在这个代码的基础上,可以再做一些改进,避免因为跳转导致无法读取页面的情况。例如下面所示的例子,写入循环语句,保证在遇到跳转后可以重复请求,直到未跳转就退出循环,避免丢失内容。
import urllib2
def getweb(url):
count = 0
max_retry = 3
content = ""
while count < max_retry:
try:
response = urllib2.urlopen(url)
content = response.read()
break
except urllib2.HTTPError, e:
count += 1
if hasattr(e, 'code') and 500 <= e.code < 600:
time.sleep(1)
else:
break
return content
通过使用这两类函数,可以保证在获取目标网址的过程中,能够有效地处理302跳转的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中使用urllib2防止302跳转的代码例子 - Python技术站