python网页请求urllib2模块简单封装代码

2015-03-05  来源:本站原创  分类:Python  人气:2 

这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码,有需要的朋友参考下

对python网页请求模块urllib2进行简单的封装。

例子:

#!/usr/bin/python
#coding: utf-8
import base64
import urllib
import urllib2
import time
class SendRequest:
  '''
  This class use to set and request the http, and get the info of response.
  e.g. set Authorization Type, request tyep..
  e.g. get html content, state code, cookie..
  SendRequest('http://10.75.0.103:8850/2/photos/square/type.json',
              data='source=216274069', type='POST', auth='base',
     user='zl2010', password='111111')
  '''
  def __init__(self, url, data=None, type='GET', auth=None, user=None, password=None, cookie = None, **header):
    '''
    url:request, raise error if none
    date: data for post or get, must be dict type
    type: GET, POST
    auth: option, if has the value must be 'base' or 'cookie'
    user: user for auth
    password: password for auth
    cookie: if request with cookie
    other header info:
    e.g. referer='www.sina.com.cn'
    '''
    self.url = url
    self.data = data
    self.type = type
    self.auth = auth
    self.user = user
    self.password = password
    self.cookie = cookie 

    if 'referer' in header:
      self.referer = header[referer]
    else:
      self.referer = None

    if 'user-agent' in header:
      self.user_agent = header[user-agent]
    else:
      self.user_agent = None

    self.setup_request()
    self.send_request()
  def setup_request(self):
    '''
    setup a request
    '''
    if self.url == None or self.url == '':
      raise 'The url should not empty!'

    # set request type
    #print self.url
    #print self.type
    #print self.data
    #print self.auth
    #print self.user
    #print self.password
    if self.type == 'POST':
      self.Req = urllib2.Request(self.url, self.data)
    elif self.type == 'GET':
      if self.data == None:
          self.Req = urllib2.Request(self.url)
      else:
        self.Req = urllib2.Request(self.url + '?' + self.data)
    else:
      print 'The http request type NOT support now!'

    ##set auth type
    if self.auth == 'base':
      if self.user == None or self.password == None:
        raise 'The user or password was not given!'
      else:
        auth_info = base64.encodestring(self.user + ':' + self.password).replace('\n','')
        auth_info = 'Basic ' + auth_info
        #print auth_info
        self.Req.add_header("Authorization", auth_info)
    elif self.auth == 'cookie':
      if self.cookie == None:
        raise 'The cookie was not given!'
      else:
        self.Req.add_header("Cookie", self.cookie)
    else:
      pass    ##add other auth type here
    ##set other header info
    if self.referer:
      self.Req.add_header('referer', self.referer)
    if self.user_agent:
      self.Req.add_header('user-agent', self.user_agent)

  def send_request(self):
    '''
    send a request
    '''
    # get a response object
    try:
      self.Res = urllib2.urlopen(self.Req)
      self.source = self.Res.read()
      self.goal_url = self.Res.geturl()
      self.code = self.Res.getcode()
      self.head_dict = self.Res.info().dict
      self.Res.close()
    except urllib2.HTTPError, e:
      self.code = e.code
      print e

  def get_code(self):
    return self.code

  def get_url(self):
    return self.goal_url

  def get_source(self):
    return self.source

  def get_header_info(self):
    return self.head_dict
  def get_cookie(self):
    if 'set-cookie' in self.head_dict:
      return self.head_dict['set-cookie']
    else:
      return None    

  def get_content_type(self):
    if 'content-type' in self.head_dict:
      return self.head_dict['content-type']
    else:
      return None

  def get_expires_time(self):
    if 'expires' in self.head_dict:
      return self.head_dict['expires']
    else:
      return None    

  def get_server_name(self):
    if 'server' in self.head_dict:
      return self.head_dict['server']
    else:
      return None   

  def __del__(self):
    pass
__all__ = [SendRequest,]

if __name__ == '__main__':
  '''
  The example for using the SendRequest class
  '''
  value = {'source':'216274069'}
  data = urllib.urlencode(value)
  url = 'http://10.75.0.103:8850/2/photos/square/type.json'
  user = 'wz_0001'
  password = '111111'
  auth = 'base'
  type = 'POST'
  t2 = time.time()
  rs = SendRequest('http://www.google.com')
  #rs = SendRequest(url, data=data, type=type, auth=auth, user=user, password=password)
  print 't2: ' + str(time.time() - t2)
  print '---------------get_code()---------------'
  print rs.get_code()
  print '---------------get_url()---------------'
  print rs.get_url()
  print '---------------get_source()---------------'
  print rs.get_source()
  print '---------------get_cookie()---------------'
  print rs.get_cookie()
  rs = None
相关文章
  • python网页请求urllib2模块简单封装代码 2015-03-05

    这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码,有需要的朋友参考下 对python网页请求模块urllib2进行简单的封装. 例子: #!/usr/bin/python #coding: utf-8 import base64 import urllib import urllib2 import time class SendRequest: ''' This class use to set and request the http, and get the i

  • js网页版计算器的简单实现 2014-06-26

    这篇文章介绍了网页版计算器的简单实现代码,有需要的朋友可以参考一下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

  • python中使用urllib2获取http请求状态码的代码例子 2013-11-01

    这篇文章主要介绍了python中使用urllib2获取http请求状态码的代码例子,需要的朋友可以参考下 采集内容常需要得到网页返回的验证码做进一步处理 下面代码是用python写的用来获取网页http状态码的脚本 #!/usr/bin/python # -*- coding: utf-8 -*- #encoding=utf-8 #Filename:states_code.py import urllib2 url = 'http://www.jb51.net/' response = None

  • python解析xml模块封装代码 2013-11-13

    这篇文章主要分享下在python中解析xml文件的模块用法,以及对模块封装的方法,有需要的朋友参考下 有如下的xml文件: <?xml version="1.0" encoding="utf-8" ?> <root> <childs> <child name='first' >1</child> <child value="2">2</child> </ch

  • Python实现爬取知乎神回复简单爬虫代码分享 2014-04-24

    这篇文章主要介绍了Python实现爬取知乎神回复简单爬虫代码分享,本文实现了爬取知乎的"如何正确地吐槽"收藏夹,是对个人的一个兴趣实现,需要的朋友可以参考下 看知乎的时候发现了一个 "如何正确地吐槽" 收藏夹,里面的一些神回复实在很搞笑,但是一页一页地看又有点麻烦,而且每次都要打开网页,于是想如果全部爬下来到一个文件里面,是不是看起来很爽,并且随时可以看到全部的,于是就开始动手了. 工具 1.Python 2.7 2.BeautifulSoup 分析网页 我们先来看

  • Python中的defaultdict模块和namedtuple模块的简单入门指南 2014-05-04

    这篇文章主要介绍了Python中的defaultdict模块和namedtuple模块的简单入门指南,efaultdict继承自dict.namedtuple继承自tuple,是Python中内置的数据类型,需要的朋友可以参考下 在Python中有一些内置的数据类型,比如int, str, list, tuple, dict等.Python的collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:namedtuple, defaultdict, deque, Counte

  • php中mysql模块部分功能的简单封装 2013-12-23

    php中mysql模块部分功能的简单封装,很多cms都是封装了一些mysql的操作代码类,大家可以参考下. class mysql { private $db; // datebase connect private $result; // mysql result static private $mysql; // mysql object private function __construct() { // The work before Create an object $this->d

  • Python psutil模块简单使用实例 2014-02-01

    这篇文章主要介绍了Python psutil模块简单使用实例,本文直接给出使用脚本,实现查看cpu的信息.查看内存信息.查看系统启动时间.查看网卡信息等,需要的朋友可以参考下 安装很简单 pip install psutil 官网地址为: https://pythonhosted.org/psutil/ (文档上有详细的api) github地址为: https://github.com/giampaolo/psutil/ psutil比较好的地方,一个是跨平台,不需要切换平台的时候在重新开放了

  • Python中使用gzip模块压缩文件的简单教程 2014-03-28

    这篇文章主要介绍了Python中使用gzip模块压缩文件的简单教程,本文的例子主要针对类UNIXZ系统,需要的朋友可以参考下 压缩数据创建gzip文件先看一个略麻烦的做法 import StringIO,gzip content = 'Life is short.I use python' zbuf = StringIO.StringIO() zfile = gzip.GzipFile(mode='wb', compresslevel=9, fileobj=zbuf) zfile.write(c

  • Python中使用urllib2防止302跳转的代码例子 2014-05-01

    这篇文章主要介绍了Python中使用urllib2防止302跳转的代码例子,即避免302跳转的实现,需要的朋友可以参考下 说明:python的urllib2获取网页(urlopen)会自动重定向(301,302).但是,有时候我们需要获取302,301页面的状态信息.就必须获取到转向前的调试信息. 下面代码将可以做到避免302重定向到新的网页 #!/usr/bin/python # -*- coding: utf-8 -*- #encoding=utf-8 #Filename:states_co

  • 简单介绍Python中的struct模块 2014-08-23

    这篇文章主要介绍了Python中的struct模块,代码基于Python2.x版本,需要的朋友可以参考下 准确地讲,Python没有专门处理字节的数据类型.但由于str既是字符串,又可以表示字节,所以,字节数组=str.而在C语言中,我们可以很方便地用struct.union来处理字节,以及字节和int,float的转换. 在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的str,你得配合位运算符这么写: >>> n = 10240099 >>>

  • Python中urllib2模块的8个使用细节分享 2015-02-03

    这篇文章主要介绍了Python中urllib2模块的8个使用细节分享,本文讲解了Proxy设置.Timeout设置.加入特定Header.Redirect.Cookie.PUT和DELETE方法等内容,需要的朋友可以参考下 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 库的使用细节. 1 Proxy 的设置 urllib2 默认会使用环境变量 http_proxy

  • Android下保存简单网页到本地(包括简单图片链接转换)实现代码 2014-03-06

    这篇文章主要介绍了Android下保存简单网页到本地(包括简单图片链接转换)实现代码,需要的朋友可以参考下 最近在做一个项目涉及到将包含图片的简单网页下载到本地,方便离线时观看,在这里分享一下,大家做下简单修改就可以用到自己的项目中了.(这里用到了AQuery库) package com.nekocode.xuedao.utils; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList;

  • python使用urllib2模块获取gravatar头像实例 2014-06-22

    python使用urllib2模块获取gravatar头像的实例,大家参考使用吧 Gravatar注册地址: https://en.gravatar.com/ """`Gravatar <https://en.gravatar.com/site/implement/>`_""" # import code for encoding urls and generating md5 hashes import urllib2, hashl

  • 简单介绍Python中的JSON模块 2014-09-10

    这篇文章主要介绍了简单介绍Python中的JSON模块,包括初步的从Python中的数据格式转换为JSON格式等,需要的朋友可以参考下 (一)什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集.JSON采用完全独立于语言的

  • python设置检查点简单实现代码 2015-01-20

    这篇文章主要介绍了python设置检查点简单实现代码,需要的朋友可以参考下 说检查点,其实就是对过去历史的记录,可以认为是log.不过这里进行了简化.举例来说,我现在又一段文本.文本里放有一堆堆的链接地址.我现在的任务是下载那些地址中的内容.另外因为网络的问题或者网站的问题,每次下载可能不会非常的成功.有可能出现断链或者socket异常错误.不过不管产生什么样的错误,我都希望我的程序能够一直跑下去.或者能停掉后,继续从为下载的链接处跑.而不是从开始的地方跑.这个问题非常简单.因为这些链接是上下文

  • urllib2模块.cookielib模块 2012-07-27

    urllib2模块 urllib模块和urllib模块类似,用来打开URL并从中获取数据.与urllib模块不同的是,urllib模块不仅可以使用urlopen()函数还可以自定义Opener来访问网页.同时要注意:urlretrieve()函数是urllib模块中的,urllib2模块中不存在该函数.但是使用urllib2模块时一般都离不开urllib模块,因为POST的数据需要使用urllib.urlencode()函数来编码. 一.urlopen() 最简单的请求方式就是用urlopen(

  • python设置windows桌面壁纸的实现代码 2013-10-04

    每天换一个壁纸,每天好心情.喜欢的朋友可以参考下 # -*- coding: UTF-8 -*- from __future__ import unicode_literals import Image import datetime import win32gui,win32con,win32api import re from HttpWrapper import SendRequest StoreFolder = "c:\\dayImage" def setWallpaperFr

  • 在Python中编写数据库模块的教程 2013-12-04

    这篇文章主要介绍了在Python中编写数据库模块的教程,本文代码基于Python2.x版本,需要的朋友可以参考下 在一个Web App中,所有数据,包括用户信息.发布的日志.评论等,都存储在数据库中.在awesome-python-app中,我们选择MySQL作为数据库. Web App里面有很多地方都要访问数据库.访问数据库需要创建数据库连接.游标对象,然后执行SQL语句,最后处理异常,清理资源.这些访问数据库的代码如果分散到各个函数中,势必无法维护,也不利于代码复用. 此外,在一个Web A

  • 零基础写python爬虫之urllib2使用指南 2014-09-20

    urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件.他以urlopen函数的形式提供了一个非常简单的接口,下面我们用实例讲解他的使用方法 前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节. 1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy. 如果想在程序中明确控制 Proxy 而不受环境变量的影响,可以使用代理. 新建test14来实现一个简单的代理D