识别自定义404页面

经常遇到这种情况:访问某个网站的页面,提示找不到该页,但返回的状态码不是404。这时就不好直接通过状态码判断了。

可以用相似度来解决这个问题:

1、向目标网站发出个“绝对”不存在的路径请求,得到自定义404页面的HTML代码;

2、用当前的HTML代码和之前得到的404页面代码做相似度运算,相似度达到某个值(比如95%)的时候,就说明是404。

def isCustom40x(url, sourceHtmlCode):
    """404自定义错误页面检测
       请求一个“绝对”不存在的页面,得到返回的内容,然后再请求指定的url,将两个结果做相似度算法,相似度高达90%以上说明是自定义404
       return: 404 -> True, else -> False
    """
    import difflib
    seq = difflib.SequenceMatcher()

    req = urllib.Request('http://%s/never_exists_dir_xxxxxx' % url, headers=headers)
    sock = urllib.urlopen(req)
    _404code = sock.read()

    seq.set_seq1(_404code)
    seq.set_seq2(sourceHtmlCode)

    similarity = seq.quick_ratio() * 100

    return similarity > 90 and True or False