识别自定义404页面

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

可以用相似度来解决这个问题:1、向目标网站发出个“绝对”不存在的路径请求,得到自定义404页面的html代码。在做判断的时候,就用当前的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