Python urllib2核心函数与高级功能详解

Miles
Miles
发布时间:2026-10-14 | 5人浏览过
原创

本文深入解析Python 2中urllib2模块的核心用法。详细讲解urlopen函数的参数配置与返回值处理,阐述Request对象在构造HTTP请求、设置Headers及POST数据中的应用,并介绍如何利用build_opener实现Cookie、认证等高级HTTP功能,附带完整代码示例。

urlopen函数详解与返回值处理

本节主要介绍urllib2模块中的核心函数urlopen。

该函数的完整签名如下:urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]])。

关键参数说明:

url参数用于指定目标网页地址,其类型既可以是标准的字符串URL,也可以是预先构建好的Request对象实例。

例如,可以通过以下方式构造请求并发送:req = urllib2.Request(url, data, headers),随后调用 response = urllib2.urlopen(req, timeout=3) 获取响应。

data参数用于指定以POST方式提交给目标服务器的数据内容。

在提交前,通常需要使用 data = urllib.urlencode(data) 对数据进行编码处理,以确保格式正确。


import urllib,urllib2 
action_url="http://www.xxxxxx.com/post"#用于测试post的网址,返回提交的数据 
values={'name':"alice",'age':20} 
data=urllib.urlencode(values)#对表单数据编码 
rqst=urllib2.Request(action_url,data) 
response=urllib2.urlopen(rqst)#模拟提交表单数据到url并获得响应

timeout参数用于设置请求的超时时间,防止程序因网络问题无限期挂起。

关于函数的返回值:

  • 调用 response.read() 可以获取服务器返回的页面具体内容。
  • 调用 response.info() 可以获取网页的元数据信息,如状态码、头部信息等。
  • 调用 response.geturl() 可以获取实际连接的URL地址,这在处理重定向时尤为有用。

该函数既可以直接接受URL字符串作为参数,类似于urllib.urlopen()的行为;也可以接受Request实例作为参数。通过创建一个Request对象,用户可以更精细地控制HTTP请求的各个细节,包括传输的数据、自定义Headers等。在最简单的使用场景中,只需传入目标地址创建Request对象,再通过urlopen传入该对象即可得到一个类文件对象(file-like object)。此外,urllib2还提供了通过handlers和openers对象来处理基础验证、Cookie管理、代理设置等高级功能的接口。

Request对象构造与参数配置

接下来介绍用于构造请求对象的Request函数。

其调用格式为:urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])。

该函数主要用于构建Request对象,允许用户传递POST数据、添加自定义请求头(headers)等。构建好的Request对象可直接作为urllib2.urlopen()的参数进行发送。

参数详细说明:

url表示目标网页地址,支持字符串或Request对象。

data表示以POST方式提交给服务器的参数数据。

headers表示用户标识信息,类型为字典。部分网站会限制脚本抓取,因此需要模拟浏览器User-Agent。例如,火狐浏览器的代理字符串可能如下所示:

Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11

浏览器的标准User-Agent格式通常包含:浏览器标识、操作系统标识、加密等级标识、浏览器语言、渲染引擎标识及版本信息。若未手动指定,urllib2默认的headers值为:

Python-urllib/2.6

origin_req_host表示发起请求的主机域名或IP地址。

示例代码中设置headers如下:headers = {'User-Agent':'Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11'}。


import urllib  
import urllib2  
url = 'http://www.weibo.cn/'  
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
h = { 'User-Agent' : user_agent }  
req = urllib2.Request(url,headers=h)  
response = urllib2.urlopen(req)  
print response.read()

使用build_opener实现高级HTTP功能

最后介绍用于处理高级HTTP功能的build_opener()函数。

其调用格式为:build_opener([handler1 [ handler2, ... ]])。

标准的urllib2.urlopen()函数不支持验证、Cookie或其他HTTP高级功能。若要支持这些功能,必须使用build_opener()函数创建自定义的Opener对象。

参数handler为Handler实例,常用的包括HTTPBasicAuthHandler(用于基本认证)、HTTPCookieProcessor(用于Cookie处理)、ProxyHandler(用于代理设置)等。build_opener()返回的对象拥有open()方法,其功能与urlopen()函数相同。

如果需要修改HTTP报头,可以通过以下方式实现:


import urllib2 
opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
opener.open('http://www.example.com/')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表