Python urllib2核心函数与高级功能详解
本文深入解析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/')
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













