ExtractorHTML 使用以下正则表达式解析页面:
static final String RELEVANT_TAG_EXTRACTOR =
"(?is)<(?:((script[^>]*+)>.*?</script)" + // 1, 2
"|((style[^>]*+)>.*?</style)" + // 3, 4
"|(((meta)|(?:\\w{1,"+MAX_ELEMENT_REPLACE+"}))\\s+[^>]*+)" + // 5, 6, 7
"|(!--(?!\\[if).*?--))>"; // 8
基本上,case 1 .. 7 匹配任何有趣的链接提取标签,case 8 匹配 HTML 注释以丢弃它们。如您所见,案例 8 小心地避免匹配表单中的注释<!--[if ... -->
,以便它们不会被丢弃。因此,在您的特定情况下,后面的<!-->
内容被匹配为起始注释,并且它被丢弃到最后一个-->
.
<!--[if (gt IE 8)|!(IE)]><!-->
是在条件内容由任何非 IE 浏览器解析的情况下生成有效 XHTML 的技巧。Heritrix 可以通过使 RELEVANT_TAG_EXTRACTOR 不被<!-->
视为评论开始来修复。这应该有效:
static final String RELEVANT_TAG_EXTRACTOR =
"(?is)<(?:((script[^>]*+)>.*?</script)" + // 1, 2
"|((style[^>]*+)>.*?</style)" + // 3, 4
"|(((meta)|(?:\\w{1,"+MAX_ELEMENT_REPLACE+"}))\\s+[^>]*+)" + // 5, 6, 7
"|(!--(?!\\[if|>).*?--))>"; // 8
你总是可以编译一个继承 org.archive.modules.extractor.ExtractorHTML 的 java 类,并使用你的类代替原始的 ExtractorHTML。