2024年4月11日发(作者:)

python urllib2模块实例简介

Posted on 2011年02月18日 by admin

简介:

urllib2是python的一个获取url(Uniform Resource Locators,统一资源定

址器)的模块。它用urlopen函数的形式提供了一个非常简洁的接口。这使得用

各种各样的协议获取url成为可能。它同时 也提供了一个稍微复杂的接口来处

理常见的状况-如基本的认证,cookies,代理,等等。这些都是由叫做opener

和handler的对象来处理的。

以下是获取url最简单的方式:

import urllib2

response = n('/')

html = ()

许多urlib2的使用都是如此简单(注意我们本来也可以用一个以”ftp:””file:”

等开头的url取代”HTTP”开头的url).然而,这篇教程的目的是解释关于HTTP

更复杂的情形。HTTP建基于请求和回应(requests &responses )-客户端制造

请求服务器返回回应。urlib2用代 表了你正在请求的HTTP request的Request

对象反映了这些。用它最简单的形式,你建立了一个Request对象来明确指明你

想要获取的url。调用urlopen函 数对请求的url返回一个respons对象。这

个respons是一个像file的对象,这意味着你能用.read()函数操作这个respon

对象:

import urllib2

req = t('/') response =

n(req) the_page = ()

注意urlib2利用了同样的Request接口来处理所有的url协议。例如,你可以

像这样请求一个ftpRequest:

req = t('ftp:///')

对于HTTP,Request对象允许你做两件额外的事:第一,你可以向服务器发送数

据。第二,你可以向服务器发送额外的信息(metadata),这些信息可以是关于

数据本身的,或者是关于这个请求本身的–这些信息被当作HTTP头发送。让我

们依次看一下这些。

数据:

有时你想向一个URL发送数据(通常这些数据是代表一些CGI脚本或者其他的

web应用)。对于HTTP,这通常叫做一个Post。当你发送一个你 在网上填的form

(表单)时,这通常是你的浏览器所做的。并不是所有的Post请求都来自HTML

表单,这些数据需要被以标准的方式encode,然后 作为一个数据参数传送给

Request对象。Encoding是在urlib中完成的,而不是在urlib2中完成的。

import urllib

import urllib2

url = '/cgi-bin/'

values = {'name' : 'Michael Foord',

'location' : 'Northampton',

'language' : 'Python' }

data = ode(values)

req = t(url, data)

response = n(req)

the_page = ()

如果你不传送数据参数,urlib2使用了一个GET请求。一个GET请求和POST请

求的不同之处在于POST请求通常具有边界效应:它们以某种 方式改变系统的状

态。(例如,通过网页设置一条指令运送一英担罐装牛肉到你家。)虽然HTTP

标准清楚的说明Post经常产生边界效应,而get从不产生 边界效应,但没有什

么能阻止一个get请求产生边界效应,或一个Post请求没有任何边界效应。数

据也能被url自己加密(Encoding)然后通过一 个get请求发送出去。

这通过以下实现:

import urllib2

import urllib

data = {}

data['name'] = 'Somebody Here'

data['location'] = 'Northampton'

data['language'] = 'Python'

url_values = ode(data)

url = '/'

full_url = url + '?' + url_values

data = (full_url)

Header头:

我们将会在这里讨论一个特殊的HTTP头,来阐释怎么向你的HTTP请求中加入头。

有一些网站不希望被某些程序浏览或者针对不同的浏览器返回不同的版本。默认

情况下,urlib2把自己识别为Python-urllib/x.y(这里的xy是python发行版

的主要或次要的版本号,如, Python-urllib/2.5),这些也许会混淆站点,或

者完全不工作。浏览器区别自身的方式是通过User-Agent头。当你建立一个

Request对象时,你可以加入一个头字典。接下来的这个例子和上面的请求一样,

不过它把自己定义为IE的一个版本。

import urllib

import urllib2

url = '/cgi-bin/'

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

values = {'name' : 'Michael Foord',

'location' : 'Northampton',