识别自定义 404 页面
经常遇到这种情况:访问某个网站的页面,提示找不到该页,但返回的状态码不是404。这时就不好直接通过状态码判断了。
可以用相似度来解决这个问题:
1、向目标网站发出个“绝对”不存在的路径请求,得到自定义 404 页面的 HTML 代码;
2、用当前的 HTML 代码和之前得到的 404 页面代码做相似度运算,相似度达到某个值(比如 95%)的时候,就说明是 404。
import difflib def is_custom_40x(url, html): """404自定义错误页面检测 请求一个“绝对”不存在的页面,得到返回的内容,然后再请求指定的 url,将两个结果做相似度算法,相似度高达 90% 以上说明是自定义 404 Return: 404 -> True, else -> False """ 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(html) similarity = seq.quick_ratio() * 100 return similarity > 90 and True or False