示例一:urllib2基本使用1
imp 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里面的代码,就是这里的html。html就是返回的页面的源代码。
实例二:urllib2基本使用2
通过urllib2.Request()构造一个有额外数据的请求信息。包括“http header”和想要发送的数据,这些数据需要被以标准的方式encode,然后作为一个数据参数传送给Request对象。Encoding是在urllib中完成的,而不是在urllib2中完成的。看下面代码就明白了。
imp url = 'http://www.someserver.com/cgi-bin/register.cgi' da |
实例三:build_opener()
imp imp 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抛出一个urlerror,HTTPerror是HTTP
URL在特别的情况下被抛出的URLError的一个子类。
通常,urlerror被抛出是因为没有网络连接(没有至特定服务器的连接)或者特定的服务器不存在。在这种情况下,含有reason属性的异常将被抛出,以一种包含错误代码和文本错误信息的tuple形式。
>>> req = urllib2.Request('http://www.pretend_server.org') |
当一个错误被抛出的时候,服务器返回一个HTTP错误代码和一个错误页。你可以使用返回的HTTP错误示例。这意味着它不但具有co
转:http://hi.baidu.com/554151688/blog/item/945f67df3ab014d48c102918.html