一、urllib2模块回顾
urllib2模块中最重要的函数是urlopen()函数,用于获取URLs资源(Uniform Resorce Locators)。urlopen函数不仅可以用于简单的情况,还可以进行复杂情况下的资源获取如认证(authentication)、cookies、代理等。urlopen支持多种协议,如http、ftp、file等。
HTTP是基于请求、响应的协议,客户端发出请求、服务器端作出响应。urllib2通过Request对象反映发出的HTTP请求,调用urlopen()时就会发出请求,函数返回值就是相应的响应对象。
1、POST数据
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对象。
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属性(是一个(错误码、错误原因)的元组)。
5 |
url = "http://www.baidu.com/"
|
7 |
response = urllib2.urlopen(url)
|
8 |
except urllib2.URLError,e:
|
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等方法。
05 |
url = "http://cs.scu.edu.cn/~duanlei"
|
07 |
response = urllib2.urlopen(url)
|
08 |
except urllib2.HTTPError,e:
|
3、总结
如果想在代码中处理URLError和HTTPError有两种方法,代码如下:
06 |
response = urllib2.urlopen(url)
|
07 |
except urllib2.HTTPError,e:
|
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
|
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()
|
相比较而言,第二种异常处理方法更优。
分享到:
相关推荐
* 异常处理:在使用 urllib2 模块时,需要注意异常处理,否则可能会导致程序崩溃。 urllib2 模块是 Python 的一个非常有用的模块,提供了访问网页和本地文件的功能。使用 urllib2 模块可以快速开发网络爬虫程序,从...
Python的urllib模块是Python标准库中的一个重要组成部分,它为开发者提供了访问互联网资源的工具。urllib模块包含了多个子模块,如urlopen、urlretrieve、urlparse等,它们各自承担着不同的网络请求任务。在Python 3...
Python的urllib2模块是用于处理URL的工具集,它为开发者提供了强大的功能,包括访问网页、处理HTTP请求和响应、处理HTTP头、处理认证、处理cookies和代理等。在这个模块中,`urlopen()`函数是最核心的部分,它能够...
这篇博客文章“python中urllib2模块 HTTPBasicAuthHandler认证 HTTPError bug”探讨了在使用`urllib2.HTTPBasicAuthHandler`进行认证时可能遇到的错误和解决方法。 首先,`urllib2`库提供了`HTTPBasicAuthHandler`...
四、异常处理 在实际网络请求中,经常需要处理各种错误情况,urllib2为此提供了`URLError`和`HTTPError`两种异常类型。`URLError`通常表示底层网络错误,如DNS解析失败或连接超时;而`HTTPError`则代表了服务器返回...
通过本文的详细介绍和代码示例,您应该能够掌握urllib模块的使用方法,包括发送GET和POST请求、处理HTTP响应、解析和构建URLs、处理异常以及解析robots.txt文件。这些技能对于进行网络编程和数据抓取非常有用。希望...
在Python 3中,`urllib2`的功能被拆分,`urllib.request`模块提供了`urlopen()`函数,`urllib.error`则包含异常处理。迁移时,`urllib2.urlopen()`可以替换为`urllib.request.urlopen()`,`urllib2.Request`替换为`...
urllib3提供了丰富的异常处理机制,例如`URLError`和`HTTPError`,用于捕获和处理请求过程中可能出现的问题。 7. **与其他库的集成** urllib3常与requests库结合使用,requests库在其内部使用了urllib3,提供了一...
在Python编程语言中,`response`对象和`urllib`模块是进行网络数据请求和处理的重要工具。本讲将深入探讨这两个概念以及它们在实际应用中的使用方式。 首先,让我们来理解`response`对象。在Python中,当我们使用像...
本篇文章将深入探讨`urllib2`模块的用法,特别是针对HTTP异常处理的功能。 首先,最基本的HTTP请求是通过`urllib2.urlopen()`函数实现的。例如,我们可以直接通过URL来获取网页内容: ```python import urllib2 ...
本文将详细介绍如何使用`urllib2`模块来实现基本的网络爬虫,并加入异常处理功能以增强程序的健壮性。 #### 一、`urllib2`简介 `urllib2`是Python 2.x版本中用于访问网络资源的一个库,它可以用来打开多种类型的...
6. **异常处理**:在实际编程中,应妥善处理可能发生的网络错误,如连接失败、超时、HTTP错误等。通常使用`try/except`语句进行捕获并采取相应的恢复措施。 7. **优化和最佳实践**: - 使用`requests`库代替`...
### Python的urllib2库详解及实例 #### 引言 ...同时,错误和异常处理机制确保了代码的稳定性和可靠性。尽管在Python 3中已被其他模块取代,但在Python 2环境中,掌握`urllib2`的使用仍然十分重要。
在Python编程中,当需要处理网络请求和下载文件时,`urllib2`模块是一个非常重要的工具。在某些情况下,我们可能需要实现断点续传下载功能,这在处理大文件时尤其有用,因为它允许我们在网络中断后从上次停止的地方...
4. **异常处理**:`try...except`语句用于捕获可能出现的错误,例如网络连接问题或无效的URL。如果遇到问题,程序会打印错误信息,而不是完全崩溃。 5. **递归调用**:如果URL是相对路径,代码会尝试解析出完整的...
9. **错误处理**:`urllib3.exceptions` 模块提供了丰富的异常类,便于处理各种HTTP请求中可能出现的问题。 10. **第三方扩展**:`urllib3` 作为基础库,常被其他Python HTTP客户端如`requests` 所使用,也易于与...
根据提供的文件内容,我们可以提取以下知识点: 1. urllib包概述: urllib是Python标准库的一部分,用于处理URL相关的操作...以上内容旨在通过urllib模块帮助用户获取网络资源,并提供处理网络请求中常见问题的指导。
与标准库中的 urllib 和 urllib2 模块相比,urllib3 提供了更加友好和方便的接口,支持连接池、重试、自动重定向等功能,使得 HTTP 客户端的编写变得更加简单和可靠。 urllib3 支持连接池管理,可以在多个请求之间...
在Python 2中,`urllib`和`urllib2`是两个主要的模块,分别用于处理URL操作和HTTP请求。而在Python 3中,这两个模块被拆分为以下几个子模块: - `urllib.request`:负责发出HTTP、HTTPS等请求,包含了`urlopen()...