python3爬虫(8):异常处理以及代理的使用

当我们使用urlopen发出一个请求的时候,如果urlopen不能处理这个response,就会产生错误。
一次我们这里就要讲到URLError和HTTPError,以及对他们的处理。

URLError 产生的原因主要有:
1:没有网络连接
2:服务器连接失败
3:找不到指定的服务器

# -*- coding:utf-8 -*-
from urllib import request
try:
    response=request.urlopen("http://www.dihfoihoh.com")
except error.URLError,error:
    print(error)

运行结果:
urlopen error [Errno 8] nodename nor servname provided, or not known
urlopen error,错误代码8,错误原因是没有找到指定的服务器。

HTTPError是URLError的子类,我们发出一个请求时,服务器上都会对应一个response应答对象,其中它包含一个数字”响应状态码”。
如果urlopen或opener.open不能处理的,会产生一个HTTPError,对应相应的状态码,HTTP状态码表示HTTP协议所返回的响应的状态。

# -*- coding:utf-8 -*-
from urllib import request
try:
    response=request.urlopen("http://www.dihfoihoh.com")
except error.HTTPError,error:
    print(error.code)
    print(error)

运行效果:
404
HTTP Error 404: Not Found
HTTP Error,错误代号是404,错误原因是Not Found,说明服务器无法找到被请求的页面。通常产生这种错误的,要么url不对,要么ip被封。

代理的使用:

urllib.request.ProxyHandler(proxies=None)
当需要抓取的网站设置了访问限制,这时就需要用到代理来抓取数据。

# -*- coding:utf-8 -*-
from urllib import request
import random
proxy_list = [
    {"http" : "183.23.68.83:80"},
    {"http" : "183.23.68.83:80"},
    {"http" : "183.23.68.83:80"},
    {"http" : "183.23.68.83:80"},
    {"http" : "183.23.68.83:80"},
]

# 随机选择一个代理
proxy = random.choice(proxy_list)
# 设置proxy
proxies = request.ProxyHandler(proxy)
opener = request.build_opener(proxies)
request.install_opener(opener)  
data = parse.urlencode(data).encode('utf-8')
html = opener.open(url, data).read().encode("utf-8")
return html

OK!
python3的urllib模块基本介绍完毕,根据小弟所介绍的,相信大家能够写出一个小爬虫了吧!

猜你喜欢

转载自blog.csdn.net/katyusha1/article/details/78385841