问题/证据
Heritrix没有检测到在一个字符串中打开和关闭的条件注释中是否存在文件,如下所示:
<!--[if (gt IE 8)|!(IE)]><!-->
<link rel="stylesheet" href="/css/mod.css" />
<!--<![endif]-->然而,像这样的标准条件块工作得很好:
<!--[if lte IE 9]>
<script src="/js/ltei9.js"></script>
<![endif]-->我发现问题就在于这部分的评论:
<!-->然后在测试用例中删除该块允许Heritrix发现css文件。
问题
我该如何克服这个问题?它是Heritrix bug,还是我们可以通过爬虫-bean声明来解决的问题?我知道注释块是用来“欺骗”某些浏览器版本的,而更改网站代码并不是一种选择。赫里特里克斯能被改编成否定评论吗?
发布于 2015-06-18 18:54:08
ExtractorHTML使用以下regex解析页面:
静态最后字符串RELEVANT_TAG_EXTRACTOR =“(?is)<(?:(script^>*+)>.*?*+)>.*?*+)”+/ 5,6,7“(-(如果)”(如果).*-)>“;// 8
基本上,案例1 .。7匹配链接提取的任何感兴趣的标记,案例8匹配HTML注释以丢弃它们。如您所见,案例8小心地避免了表单<!--[if ... -->中的匹配注释,因此它们不会被丢弃。因此,在您的具体情况下,后面的<!-->与起始注释相匹配,直到最后一个-->都会被丢弃。
在任何非IE浏览器解析条件内容的情况下,<!--[if (gt IE 8)|!(IE)]><!-->是一个使XHTML有效的技巧。Heritrix可以通过让RELEVANT_TAG_EXTRACTOR不把<!-->作为评论开始来修复。这应该是可行的:
静态最后字符串RELEVANT_TAG_EXTRACTOR =“(?is)<(?:(script^>*+)>.*?*+)>.*?*+)”+/ 5,6,7“(-(?!\[if|>).*-)>”;// 8
您始终可以编译一个继承org.archive.modules.extractor.ExtractorHTML的java类,并使用您的类来代替原始的ExtractorHTML。
https://stackoverflow.com/questions/30912661
复制相似问题