gpt4 book ai didi

java - Heritrix 在条件注释 block 中找不到 CSS 文件

转载 作者:行者123 更新时间:2023-11-30 08:07:20 25 4
gpt4 key购买 nike

问题/证据

Heritrix 未检测到在一个字符串中打开和关闭的条件注释中是否存在文件,如下所示:

<!--[if (gt IE 8)|!(IE)]><!--> 
<link rel="stylesheet" href="/css/mod.css" />
<!--<![endif]-->

但是像这样的标准条件 block 工作正常:

<!--[if lte IE 9]>
<script src="/js/ltei9.js"></script>
<![endif]-->

我已经确定问题出在评论的这一部分:

<!-->

在测试用例中删除该 block 然后允许 Heritrix 发现 css 文件。

问题

我应该如何克服这个问题?这是一个 Heritrix bug,还是我们可以通过crawler-beans 声明来解决这个问题?我知道评论 block 是为了“欺骗”某些浏览器版本,并且更改网站代码不是一个选项。 Heritrix 可以修改来否定评论吗?

最佳答案

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

基本上,情况 1 .. 7 匹配任何感兴趣的链接提取标签,情况 8 匹配 HTML 注释以丢弃它们。正如您所看到的,案例 8 小心地避免匹配 <!--[if ... --> 形式的注释。 ,这样它们就不会被丢弃。因此,在您的具体情况下,<!-->接下来的内容被匹配为起始注释,并且被丢弃到最后--> .

<!--[if (gt IE 8)|!(IE)]><!-->是一个制作有效 XHTML 的技巧,其中条件内容可以由任何非 IE 浏览器解析。 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。

关于java - Heritrix 在条件注释 block 中找不到 CSS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30912661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com