标签:UI 不同的 http请求 执行 数据 def none enc import
首先要说明的是,一下代码是在python2.7版本下检测的
一.最简单的爬虫程序 --下载网页
import urllib2
request=urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(request)
print response.read()
怎么样,很简单吧。
urllib2是python中的一个标准库,以上代码会抓取一个特定的网页并将抓取的网页返回。urllib2这个库的使用要多加研究,这个是使用的基础。
1、urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。他以urlopen函数的形式提供了一个非常简单的接口,这是具有利用不同协议获取URLs的能力;它同样提供了一个比较复杂的接口来处理一般情况,例如:基础验证,cookies,代理和其他,它们通过handlers和openers的对象提供。
2、urllib2.urlopen(url, data=None, timeout=None)
参数
url:打开一个url,可以是字符串(如同urllib.urlopen的url参数),或是一个Request对象(这是special的地方)
data:向服务器传送的额外数据,仅http请求会用到这个参数。当data不为None时,说明此Http请求是Post,而不是Get。这个参数与urllib2.Request类的构造函数的data参数相同,详见urllib2.Request。一般不会设定这个参数,需要时会在urllib2.Request的构造函数处设置
timeout:设置超时的时间,类型是整型,单位是秒;如果超过指定时间仍未得到所请求服务器的响应(例如由于网络环境差等原因),则抛出异常,而不会无限制等待。适用于HTTP, HTTPS, FTP, FTPS
返回值
返回一个类似于文件描述符号(file-like)的对象,与urllib.urlopen的返回值相同,通过返回值也可以使用geturl()和info()。
3、urllib2.Request类,一般使用方法是使用其构造函数得到一个Request对象:class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
表示一个URL请求
参数
url:一个URL字符串
data:向服务器传送的额外数据,仅http请求会用到这个参数。当data不为None时,说明此Http请求是Post,而不是Get。其类型应为字符串,一般使用urllib.urlencode()对一个dict或tuple进行处理,得到该字符串。
headers:请求头,类型是dict。除此之外,请求头可以在创建完Request对象后,通过该对象调用add_header(key, val)添加到对象中。常用方法是添加User-Agent请求头,冒充浏览器请求,用于哄篇服务器,因为一些服务器不允许程序访问。
后两个参数一般用不到,不再介绍
返回值
一个Request对象
4、urllib2.OpenerDirector类
当你获取一个URL时,你需要使用一个opener(OpenerDirector)。正常情况下我们一直使用默认的opener,被urlopen使用,但你也可以创建自定义的openers。opener使用handler处理任务,所有的重活都交给这些handlers来做。每一个handler知道怎么以特定的url协议打开url,或者怎么处理打开url的某些方面,如,HTTP重定向,或者HTTP cookie。
5、def urllib2.build_opener([handler, ...])
创建一个OpenerDirector对象,可以包含多个handlers
参数
handler, ...:urllib2提供很多handler来处理不同的请求,常用的HTTPHandler,FTPHandler都比较好理解。这里提一下HTTPCookieProcessor,HTTPCookieProcessor是处理cookie的,在很多需要身份验证的请求中cookie是必不可少的,python中对cookie的操作是由cookielib模块来完成的,而这个handler只是调用了其方法,在request和response过程中将cookie加到请求中和把cookie从响应中解析出来。
返回值
OpenerDirector对象
6、def urllib2.install_opener(opener)
install_opener能设置一个全局opener对象,这意味着调用urlopen将会都用你刚安装的opener。
参数
opener:OpenerDirector对象
7、urllib2.HTTPCookieProcessor类,通常使用其构造函数得到一个对象,即一个handler:class urllib2.HTTPCookieProcessor([cookiejar])
参数
cookiejar:一个cookielib.CookieJar对象,通过构造函数cookielib.CookieJar()得到
返回值
HTTPCookieProcessor对象,即一个handler
二.捕获下载异常
import urllib2
def download(url):
print ‘downloading:‘,url
try:
html=urllib2.urlopen(url).read()
except urllib2.URLError as e:
print ‘download error:‘, e.reason
html=None
return html
download(‘http://httpstat,us/500‘)
我们引入了urllib2标准库,并且定义了一个download函数 ,其中用到了 try/except 处理异常的语法。
三.网页出错与重试下载
import urllib2
def download(url,num_retries=2):
print ‘downloading:‘,url
try:
html=urllib2.urlopen(url).read()
except urllib2.URLError as e:
print ‘download error:‘, e.reason
html=None
if num_retries>0:
if hasattr(e, ‘code‘) and 500<=e.code<600:
#recursively retry 5XX http errors
return download(url, num_retries-1)
return html
下载时遇到的错误经常是临时性的,比如服务器过载时返回的503 Service Unavilable 错误等。
一般来说4xx错误发生在请求存在问题时候,5xx错误发生在服务器存在问题时。所以我们只需要确保在发生5xx错误时候重新下载。
1xx-信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个1xx响应。
100-继续。
101-切换协议。
2xx-成功
这类状态代码表明服务器成功地接受了客户端请求。
200-确定。客户端请求已成功。
201-已创建。
202-已接受。
203-非权威性信息。
204-无内容。
205-重置内容。
206-部分内容。
3xx-重定向
客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
301-对象已永久移走,即永久重定向。
302-对象已临时移动。
304-未修改。
307-临时重定向。
4xx-客户端错误
发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。
401-访问被拒绝。IIS定义了许多不同的401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在IIS日志中显示:
401.1-登录失败。
401.2-服务器配置导致登录失败。
401.3-由于ACL对资源的限制而未获得授权。
401.4-筛选器授权失败。
401.5-ISAPI/CGI应用程序授权失败。
401.7–访问被Web服务器上的URL授权策略拒绝。这个错误代码为IIS6.0所专用。
403-禁止访问:IIS定义了许多不同的403错误,它们指明更为具体的错误原因:
403.1-执行访问被禁止。
403.2-读访问被禁止。
403.3-写访问被禁止。
403.4-要求SSL。
403.5-要求SSL128。
403.6-IP地址被拒绝。
403.7-要求客户端证书。
403.8-站点访问被拒绝。
403.9-用户数过多。
403.10-配置无效。
403.11-密码更改。
403.12-拒绝访问映射表。
403.13-客户端证书被吊销。
403.14-拒绝目录列表。
403.15-超出客户端访问许可。
403.16-客户端证书不受信任或无效。
403.17-客户端证书已过期或尚未生效。
403.18-在当前的应用程序池中不能执行所请求的URL。这个错误代码为IIS6.0所专用。
403.19-不能为这个应用程序池中的客户端执行CGI。这个错误代码为IIS6.0所专用。
403.20-Passport登录失败。这个错误代码为IIS6.0所专用。
404-未找到。
404.0-(无)–没有找到文件或目录。
404.1-无法在所请求的端口上访问Web站点。
404.2-Web服务扩展锁定策略阻止本请求。
404.3-MIME映射策略阻止本请求。
405-用来访问本页面的HTTP谓词不被允许(方法不被允许)
406-客户端浏览器不接受所请求页面的MIME类型。
407-要求进行代理身份验证。
412-前提条件失败。
413–请求实体太大。
414-请求URI太长。
415–不支持的媒体类型。
416–所请求的范围无法满足。
417–执行失败。
423–锁定的错误。
5xx-服务器错误
服务器由于遇到错误而不能完成该请求。
500-内部服务器错误。
500.12-应用程序正忙于在Web服务器上重新启动。
500.13-Web服务器太忙。
500.15-不允许直接请求Global.asa。
500.16–UNC授权凭据不正确。这个错误代码为IIS6.0所专用。
500.18–URL授权存储不能打开。这个错误代码为IIS6.0所专用。
500.100-内部ASP错误。
501-页眉值指定了未实现的配置。
502-Web服务器用作网关或代理服务器时收到了无效响应。
502.1-CGI应用程序超时。
502.2-CGI应用程序出错。application.
503-服务不可用。这个错误代码为IIS6.0所专用。
504-网关超时。
505-HTTP版本不受支持。
标签:UI 不同的 http请求 执行 数据 def none enc import
原文地址:http://www.cnblogs.com/mrruning/p/7636261.html