源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Python使用urllib2获取网络资源实例讲解

  • 时间:2021-11-13 14:08 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python使用urllib2获取网络资源实例讲解
这是具有利用不同协议获取URLs的能力,他同样提供了一个比较复杂的接口来处理一般情况,例如:基础验证,cookies,代理和其他。 它们通过handlers和openers的对象提供。 urllib2支持获取不同格式的URLs(在URL的":"前定义的字串,例如:"ftp"是"ftp:python.ort/"的前缀),它们利用它们相关网络协议(例如FTP,HTTP) 进行获取。这篇教程关注最广泛的应用--HTTP。 对于简单的应用,urlopen是非常容易使用的。但当你在打开HTTP的URLs时遇到错误或异常,你将需要一些超文本传输协议(HTTP)的理解。 最权威的HTTP文档当然是RFC 2616(http://rfc.net/rfc2616.html)。这是一个技术文档,所以并不易于阅读。这篇HOWTO教程的目的是展现如何使用urllib2, 并提供足够的HTTP细节来帮助你理解。他并不是urllib2的文档说明,而是起一个辅助作用。 获取 URLs [b]最简单的使用urllib2将如下所示[/b]
[url=./css/ht2html.css]  type="text/css"?> <html><head><title>Error 404: File Not Found</title> ...... etc...
Wrapping it Up包装 所以如果你想为HTTPError或URLError做准备,将有两个基本的办法。我则比较喜欢第二种。 第一个: 注意:except HTTPError 必须在第一个,否则except URLError将同样接受到HTTPError。 第二个:
[u]复制代码[/u] 代码如下:
from urllib2 import Request, urlopen, URLError req = Request(someurl) try:     response = urlopen(req) except URLError, e:     if hasattr(e, 'reason'):         print 'We failed to reach a server.'         print 'Reason: ', e.reason     elif hasattr(e, 'code'):         print 'The server couldn\'t fulfill the request.'         print 'Error code: ', e.code else:     # everything is fine
info and geturl urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info()和geturl() geturl -- 这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许 会有重定向。获取的URL或许跟请求URL不同。 info -- 这个返回对象的字典对象,该字典描述了获取的页面情况。通常是服务器发送的特定头headers。目前是httplib.HTTPMessage 实例。 经典的headers包含"Content-length","Content-type",和其他。查看Quick Reference to HTTP Headers(http://www.cs.tut.fi/~jkorpela/http.html) 获取有用的HTTP头列表,以及它们的解释意义。 Openers和Handlers 当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例,urllib2.OpenerDirector可能名字可能有点让人混淆。)正常情况下,我们 使用默认opener -- 通过urlopen,但你能够创建个性的openers,Openers使用处理器handlers,所有的“繁重”工作由handlers处理。每个handlers知道 如何通过特定协议打开URLs,或者如何处理URL打开时的各个方面,例如HTTP重定向或者HTTP cookies。 如果你希望用特定处理器获取URLs你会想创建一个openers,例如获取一个能处理cookie的opener,或者获取一个不重定向的opener。 要创建一个 opener,实例化一个OpenerDirector,然后调用不断调用.add_handler(some_handler_instance). 同样,可以使用build_opener,这是一个更加方便的函数,用来创建opener对象,他只需要一次函数调用。 build_opener默认添加几个处理器,但提供快捷的方法来添加或更新默认处理器。 其他的处理器handlers你或许会希望处理代理,验证,和其他常用但有点特殊的情况。 install_opener 用来创建(全局)默认opener。这个表示调用urlopen将使用你安装的opener。 Opener对象有一个open方法,该方法可以像urlopen函数那样直接用来获取urls:通常不必调用install_opener,除了为了方便。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部