在使用 python36 自带的urllib插件进行网页抓取时,有些网站的路由策略是网址不存在的话会自动302重定向到首页。

由于urllib会自动的处理的302重定向并返回跳转后的结果,这样不是我们所期望的。我们希望网址不存在就直接报错,我们跳过这个网址,直接进行下一个网址的处理。

通过重写urllib.request.HTTPRedirectHandler类可以解决这个问题

from urllib import request

# 重写 HTTPRedirectHandler
class RedirctHandler(request.HTTPRedirectHandler):
    """docstring for RedirctHandler"""
    def http_error_301(self, req, fp, code, msg, headers):
        pass
    def http_error_302(self, req, fp, code, msg, headers):
        pass

# 爬虫代码
class SpiderMain:
    def __init__(self):
        pass

注意:在python2 版本中urllib模块对应的名称 是urllib2