`

urllib2模块 异常处理

 
阅读更多

   一、urllib2模块回顾

       urllib2模块中最重要的函数是urlopen()函数,用于获取URLs资源(Uniform Resorce Locators)。urlopen函数不仅可以用于简单的情况,还可以进行复杂情况下的资源获取如认证(authentication)、cookies、代理等。urlopen支持多种协议,如http、ftp、file等。

        HTTP是基于请求、响应的协议,客户端发出请求、服务器端作出响应。urllib2通过Request对象反映发出的HTTP请求,调用urlopen()时就会发出请求,函数返回值就是相应的响应对象。

     1、POST数据

1 import urllib,urllib2
2  
3 url="http://www.example.com/"
4 datas={"email":user,"password":password}
5 req=urllib2.Request(url,urllib.encode(datas))
6 response=urllib2.urlopen(req)

     2、增加Header头部

     由于一些网站不希望被程序访问,或网站会发送不同的内容给不同的浏览器类型,因此需要修改HTTP头部来将程序伪造成相应的浏览器,而浏览器通常通过头部的User-Agent来识别,因此通常只改User-Agent即可。方法是传递一个headers头部字典给Request对象。

1 import urllib2
2  
3 url="http://www.example.com/"
4 headers={"User-Agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}
5 req=urllib2.Request(url,headers=headers)
6 response=urllib2.urlopen(req)

 

                                                             二、异常处理

          当urlopen()不能处理响应时会引起URLError异常。HTTPError异常是URLError的一个子类,只有在访问HTTP类型的URL时才会引起。

1、URLError异常

    通常引起URLError的原因是:无网络连接(没有到目标服务器的路由)、访问的目标服务器不存在。在这种情况下,异常对象会有reason属性(是一个(错误码、错误原因)的元组)。

1 #! /usr/bin/env python
2 #coding=utf-8
3 import urllib2
4  
5 url="http://www.baidu.com/"
6 try:
7     response=urllib2.urlopen(url)
8 except urllib2.URLError,e:
9     print e.reason

2、HTTPError

    每一个从服务器返回的HTTP响应都有一个状态码。其中,有的状态码表示服务器不能完成相应的请求,默认的处理程序可以为我们处理一些这样的状态码(如返回的响应是重定向,urllib2会自动为我们从重定向后的页面中获取信息)。有些状态码,urllib2模块不能帮我们处理,那么urlopen函数就会引起HTTPError异常,其中典型的有404/401。

   HTTPError异常的实例有整数类型的code属性,表示服务器返回的错误状态码。

    urllib2模块默认的处理程序可以处理重定向(状态码是300范围),而且状态码在100-299范围内表示成功。因此,能够引起HTTPError异常的状态码范围是:400-599.

    当引起错误时,服务器会返回HTTP错误码和错误页面。你可以将HTPError实例作为返回页面,这意味着,HTTPError实例不仅有code属性,还有read、geturl、info等方法。

01 #! /usr/bin/env python
02 #coding=utf-8
03 import urllib2
04  
05 url="http://cs.scu.edu.cn/~duanlei"
06 try:
07     response=urllib2.urlopen(url)
08 except urllib2.HTTPError,e:
09     print e.code
10     print e.read()

3、总结

    如果想在代码中处理URLError和HTTPError有两种方法,代码如下:

01 #! /usr/bin/env python
02 #coding=utf-8
03 import urllib2
04 url="xxxxxx"  #需要访问的URL
05 try:
06     response=urllib2.urlopen(url)
07 except urllib2.HTTPError,e:    #HTTPError必须排在URLError的前面
08     print "The server couldn't fulfill the request"
09     print "Error code:",e.code
10     print "Return content:",e.read()
11 except urllib2.URLError,e:
12     print "Failed to reach the server"
13     print "The reason:",e.reason
14 else:
15     #something you should do
16     pass  #其他异常的处理
01 #! /usr/bin/env python
02 #coding=utf-8
03 import urllib2
04 url="http://xxx"  #需要访问的URL
05 try:
06     response=urllib2.urlopen(url)
07 except urllib2.URLError,e:
08     if hasattr(e,"reason"):
09         print "Failed to reach the server"
10         print "The reason:",e.reason
11     elif hasattr(e,"code"):
12         print "The server couldn't fulfill the request"
13         print "Error code:",e.code
14         print "Return content:",e.read()
15 else:
16     pass  #其他异常的处理

   相比较而言,第二种异常处理方法更优。

分享到:
评论

相关推荐

    Python 网络爬虫开发 Python爬虫入门基础教程:Python的urllib2 模块解析 共6页.pptx

    * 异常处理:在使用 urllib2 模块时,需要注意异常处理,否则可能会导致程序崩溃。 urllib2 模块是 Python 的一个非常有用的模块,提供了访问网页和本地文件的功能。使用 urllib2 模块可以快速开发网络爬虫程序,从...

    Python urllib urllib模块

    Python的urllib模块是Python标准库中的一个重要组成部分,它为开发者提供了访问互联网资源的工具。urllib模块包含了多个子模块,如urlopen、urlretrieve、urlparse等,它们各自承担着不同的网络请求任务。在Python 3...

    pythonurllib2模块实例简介.pdf

    Python的urllib2模块是用于处理URL的工具集,它为开发者提供了强大的功能,包括访问网页、处理HTTP请求和响应、处理HTTP头、处理认证、处理cookies和代理等。在这个模块中,`urlopen()`函数是最核心的部分,它能够...

    python中urllib2模块 HTTPBasicAuthHandler认证 HTTPError bug

    这篇博客文章“python中urllib2模块 HTTPBasicAuthHandler认证 HTTPError bug”探讨了在使用`urllib2.HTTPBasicAuthHandler`进行认证时可能遇到的错误和解决方法。 首先,`urllib2`库提供了`HTTPBasicAuthHandler`...

    phython urllib2 api

    四、异常处理 在实际网络请求中,经常需要处理各种错误情况,urllib2为此提供了`URLError`和`HTTPError`两种异常类型。`URLError`通常表示底层网络错误,如DNS解析失败或连接超时;而`HTTPError`则代表了服务器返回...

    Python网络请求利器:深入探索`urllib`模块

    通过本文的详细介绍和代码示例,您应该能够掌握urllib模块的使用方法,包括发送GET和POST请求、处理HTTP响应、解析和构建URLs、处理异常以及解析robots.txt文件。这些技能对于进行网络编程和数据抓取非常有用。希望...

    urllib2 官方文档解析1

    在Python 3中,`urllib2`的功能被拆分,`urllib.request`模块提供了`urlopen()`函数,`urllib.error`则包含异常处理。迁移时,`urllib2.urlopen()`可以替换为`urllib.request.urlopen()`,`urllib2.Request`替换为`...

    python urllib3

    urllib3提供了丰富的异常处理机制,例如`URLError`和`HTTPError`,用于捕获和处理请求过程中可能出现的问题。 7. **与其他库的集成** urllib3常与requests库结合使用,requests库在其内部使用了urllib3,提供了一...

    第3讲-response方法&urllib模块(1).zip

    在Python编程语言中,`response`对象和`urllib`模块是进行网络数据请求和处理的重要工具。本讲将深入探讨这两个概念以及它们在实际应用中的使用方式。 首先,让我们来理解`response`对象。在Python中,当我们使用像...

    Python网络编程中urllib2模块的用法总结

    本篇文章将深入探讨`urllib2`模块的用法,特别是针对HTTP异常处理的功能。 首先,最基本的HTTP请求是通过`urllib2.urlopen()`函数实现的。例如,我们可以直接通过URL来获取网页内容: ```python import urllib2 ...

    Python中使用urllib2模块编写爬虫的简单上手示例

    本文将详细介绍如何使用`urllib2`模块来实现基本的网络爬虫,并加入异常处理功能以增强程序的健壮性。 #### 一、`urllib2`简介 `urllib2`是Python 2.x版本中用于访问网络资源的一个库,它可以用来打开多种类型的...

    pythonurllib模块下载图片共9页.pdf.z

    6. **异常处理**:在实际编程中,应妥善处理可能发生的网络错误,如连接失败、超时、HTTP错误等。通常使用`try/except`语句进行捕获并采取相应的恢复措施。 7. **优化和最佳实践**: - 使用`requests`库代替`...

    python urllib2详解及实例 Python开发技术文章_教程 - 红黑联盟.pdf

    ### Python的urllib2库详解及实例 #### 引言 ...同时,错误和异常处理机制确保了代码的稳定性和可靠性。尽管在Python 3中已被其他模块取代,但在Python 2环境中,掌握`urllib2`的使用仍然十分重要。

    Python使用urllib2模块实现断点续传下载的方法

    在Python编程中,当需要处理网络请求和下载文件时,`urllib2`模块是一个非常重要的工具。在某些情况下,我们可能需要实现断点续传下载功能,这在处理大文件时尤其有用,因为它允许我们在网络中断后从上次停止的地方...

    Python使用urllib2模块抓取HTML页面资源的实例分享

    4. **异常处理**:`try...except`语句用于捕获可能出现的错误,例如网络连接问题或无效的URL。如果遇到问题,程序会打印错误信息,而不是完全崩溃。 5. **递归调用**:如果URL是相对路径,代码会尝试解析出完整的...

    urllib3-master.zip

    9. **错误处理**:`urllib3.exceptions` 模块提供了丰富的异常类,便于处理各种HTTP请求中可能出现的问题。 10. **第三方扩展**:`urllib3` 作为基础库,常被其他Python HTTP客户端如`requests` 所使用,也易于与...

    howto-urllib2.pdf

    根据提供的文件内容,我们可以提取以下知识点: 1. urllib包概述: urllib是Python标准库的一部分,用于处理URL相关的操作...以上内容旨在通过urllib模块帮助用户获取网络资源,并提供处理网络请求中常见问题的指导。

    urllib3-1.26.13.zip 安装包,免费下载

    与标准库中的 urllib 和 urllib2 模块相比,urllib3 提供了更加友好和方便的接口,支持连接池、重试、自动重定向等功能,使得 HTTP 客户端的编写变得更加简单和可靠。 urllib3 支持连接池管理,可以在多个请求之间...

    Python3如何对urllib和urllib2进行重构

    在Python 2中,`urllib`和`urllib2`是两个主要的模块,分别用于处理URL操作和HTTP请求。而在Python 3中,这两个模块被拆分为以下几个子模块: - `urllib.request`:负责发出HTTP、HTTPS等请求,包含了`urlopen()...

Global site tag (gtag.js) - Google Analytics