`

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网络编程中urllib2模块的用法总结

    使用urllib2模块进行基于url的HTTP请求等操作大家也许都比较熟悉,这里我们再深入来了解一下urllib2针对HTTP的异常处理相关功能,一起来看一下Python网络编程中urllib2模块的用法总结:

    Python爬虫基础教程-Urllib详解.pdf

    Python3中将python2.7的urllib和urllib2两个包合并成了⼀个urllib库,其主要包括⼀下模块: urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.robotparser robots.txt解析模块 ...

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

    主要介绍了Python中使用urllib2模块编写爬虫的简单上手示例,文中还介绍到了相关异常处理功能的添加,需要的朋友可以参考下

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

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

    Python urllib.request对象案例解析

    刚刚接触爬虫,基础的东西得时时回顾才行...2. urllib.error 异常处理模块 3. urllib.parse url 解析模块 4. urllib.robotparser robots.txt 解析模块 Urllib 库下的几种模块基本使用如下: urllib.request 关于 urlli

    对python3 urllib包与http包的使用详解

    urllib包和http包都是面向HTTP协议的。其中urllib主要用于处理 URL,使用...2.urllib.error ———定义了常见的urllib.request会引发的异常; 3.urllib.parse———用于解析 URL; 具体方法: urllib.request.urlop

    Python爬虫实战系列之三解析响应内容.pptx

    4 个模块: ...urllib.error : 异常处理模块,捕获请求错误。 urllib.parse : URL解析模块,URL 拆分、解析、合并等。 urllib.robotparser :robots.txt解析模块,识别网站的robots.txt 文件。

    Python爬虫之urllib基础用法教程

    综述 本系列文档用于对Python爬虫技术进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了... error : 异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作

    爬虫之网络请求.pptx

    Python爬虫实战系列之二:网络...urllib.error : 异常处理模块,捕获请求错误。 urllib.parse : URL解析模块,URL 拆分、解析、合并等。 urllib.robotparser :robots.txt解析模块,识别网站的robots.txt 文件。

    零基础学习python及爬虫

    example-6.py python异常处理实战 example-7.py 面向对象编程 example-8.py 正则表达式-原子 example-9.py 正则表达式-元字符 example-10.py 正则表达式-模式修正符 example-11.py 正则表达式-贪婪模式和懒惰模式 ...

    用异常处理知识解决requests中的ConnectionError

    首先这个error是时有时无的,所以我就想到了用多次循环来进行requests请求,然后做个异常处理不就行了吗,下面是具体操作: 这个是访问github的API的实例操作: import requests requests.packages.urllib3.disable...

    python 爬虫基本使用——统计杭电oj题目正确率并排序

     2、error ,异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。  3、parse ,工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等。  4、...

    Python核心编程第二版(ok)

     10.3.4 处理多个异常的except语句   10.3.5 捕获所有异常   10.3.6 “异常参数”   10.3.7 在应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   ...

    Python核心编程第二版

     10.3.4 处理多个异常的except语句   10.3.5 捕获所有异常   10.3.6 “异常参数”   10.3.7 在应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   ...

    零基础学习python以及当当网百度新闻豆瓣爬虫项目实战源码.zip

    [example-6.py](/blob/master/examples/example-6.py) python异常处理实战 7. [example-7.py](/blob/master/examples/example-7.py) 面向对象编程 8. [example-8.py](/blob/master/examples/example-8.py) 正则...

    metadata_parser:用于获取元数据的python库

    对requests最新修复改进了重定向处理,urllib3和urllib3错误。 特征 metadata_parser尽可能多地从文档中提取元数据 开发人员可以设置用于查找元数据的“策略”(即仅接受opengraph或页面属性) 轻量级但功能性(!...

    Python基础知识点 初识Python.md

    在最早的版本中,Python已经提供了对“类”,“函数”,“异常处理”等构造块的支持,同时提供了“列表”和“字典”等核心数据类型,同时支持以模块为基础的拓展系统。 1994年1月:Python 1.0正式发布。 2000年10...

    Python基础教程(第3版)-201802出版-文字版

    8 1.8 模块 .......................................................... 8 1.8.1 cmath 和复数 ................................. 9 1.8.2 回到未来 ...................................... 10 1.9 保存并执行...

Global site tag (gtag.js) - Google Analytics