urllib2基本使用实例

本文详细介绍了urllib2库的基础使用方法,包括构造请求、发送请求、读取响应及异常处理。通过实例演示了如何使用urllib2.Request构造请求、发送带有额外数据的请求、构建操作器并进行请求等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例一:urllib2基本使用1

import urllib2

req = urllib2.Request('http://www.baidu.com')  

response = urllib2.urlopen(req)

html = response.read()

1、urllib2.Request()的功能是构造一个请求信息,返回的req就是一个构造好的请求。

通过Request()还可构造一些额外的请求信息(metadata),见实例二。

2、urllib2.urlopen()的功能是发送刚刚构造好的请求req,并返回一个file形的对象,response,包括了所有的返回信息。

3、通过response.read()可以读取到response里面的代码,就是这里的htmlhtml就是返回的页面的源代码。

实例二:urllib2基本使用2

通过urllib2.Request()构造一个有额外数据的请求信息。包括“http header”和想要发送的数据,这些数据需要被以标准的方式encode,然后作为一个数据参数传送给Request对象。Encoding是在urllib中完成的,而不是在urllib2中完成的。看下面代码就明白了。

import urllib
import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'Michael Foord', 'location' : 'Northampton', 'language' : 'Python' }
headers = { 'User-Agent' : user_agent }

data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()

实例三:build_opener()

import hashlib

import urllib2

req = urllib2.Request('http://www.baidu.com')  

response1 = urllib2.urlopen(req)

html_1 = response1.read()

handle = urllib2.build_opener()

response2=handle.open(req)

html_2=response2.read()

m = hashlib.md5(html_1)   

y = hashlib.md5(html_2)

print m.hexdigest()

print y.hexdigest()

输入的结果为

21b8daaaf7bb11e480fdd82a6d7772de

21b8daaaf7bb11e480fdd82a6d7772de

可以得知返回的htm1=htm2

所以handle.open()与urllib2.urlopen()其实是一样的。

这能说明build_opener的什么问题,还没有研究过。

实例四: 异常处理

不能处理一个response时,urlopen抛出一个urlerrorHTTPerrorHTTP URL在特别的情况下被抛出的URLError的一个子类。
通常,urlerror被抛出是因为没有网络连接(没有至特定服务器的连接)或者特定的服务器不存在。在这种情况下,含有reason属性的异常将被抛出,以一种包含错误代码和文本错误信息的tuple形式。

>>> req = urllib2.Request('http://www.pretend_server.org')
>>> try: urllib2.urlopen(req)
>>> except URLError, e:
>>> print e.reason
(4, 'getaddrinfo failed')

当一个错误被抛出的时候,服务器返回一个HTTP错误代码和一个错误页。你可以使用返回的HTTP错误示例。这意味着它不但具有code属性,而且 同时具有readgeturl,和infomethods属性

转:http://hi.baidu.com/554151688/blog/item/945f67df3ab014d48c102918.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值