Python中使用urllib2防止302跳转的代码例子

yipeiwu_com6年前Python基础

说明:python的urllib2获取网页(urlopen)会自动重定向(301,302)。但是,有时候我们需要获取302,301页面的状态信息。就必须获取到转向前的调试信息。

下面代码将可以做到避免302重定向到新的网页

#!/usr/bin/python
# -*- coding: utf-8 -*-
#encoding=utf-8
#Filename:states_code.py
 
import urllib2
 
class RedirctHandler(urllib2.HTTPRedirectHandler):
  """docstring for RedirctHandler"""
  def http_error_301(self, req, fp, code, msg, headers):
    pass
  def http_error_302(self, req, fp, code, msg, headers):
    pass
 
def getUnRedirectUrl(url,timeout=10):
  req = urllib2.Request(url)
  debug_handler = urllib2.HTTPHandler(debuglevel = 1)
  opener = urllib2.build_opener(debug_handler, RedirctHandler)
 
  html = None
  response = None
  try:
    response = opener.open(url,timeout=timeout)
    html = response.read()
  except urllib2.URLError as e:
    if hasattr(e, 'code'):
      error_info = e.code
    elif hasattr(e, 'reason'):
      error_info = e.reason
  finally:
    if response:
      response.close()
  if html:
    return html
  else:
    return error_info
 
html = getUnRedirectUrl('http://jb51.net')
print html


相关文章

Python除法之传统除法、Floor除法及真除法实例详解

先给大家介绍下Python除法之传统除法、Floor除法及真除法 python3.0 /总是执行真除法,不管操作数的类型,都返回浮点数结果(即使能整除,如4/2==2.0); //执...

解析Python中的生成器及其与迭代器的差异

生成器 生成器是一种迭代器,是一种特殊的函数,使用yield操作将函数构造成迭代器。普通的函数有一个入口,有一个返回值;当函数被调用时,从入口开始执行,结束时返回相应的返回值。生成器定义...

python操作日期和时间的方法

不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法。1.将字符串的时...

python 怎样将dataframe中的字符串日期转化为日期的方法

方法一:也是最简单的 直接使用pd.to_datetime函数实现 data['交易时间'] = pd.to_datetime(data['交易时间']) 方法二: 源自利...

利用Python绘制MySQL数据图实现数据可视化

利用Python绘制MySQL数据图实现数据可视化

本教程的所有Python代码可以在网上的IPython notebook中获取。 考虑在公司里使用Plotly?可以看一下Plotly的on-premises企业版。(注:On-prem...