簡體   English   中英

Heritrix在條件注釋塊中找不到CSS文件

[英]Heritrix not finding CSS files in conditional comment blocks

問題/證據

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]-->

我發現問題出在注釋的這一部分:

<!-->

然后,在測試用例中刪除該塊將使Herritrix發現css文件。

問題

我應該如何克服呢? 它是Heritrix的錯誤,還是我們可以通過rawler-beans聲明解決的問題? 我知道這里有注釋框可以“欺騙”某些瀏覽器版本,並且不能更改網站代碼。 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瀏覽器都將解析條件內容。 可以通過使RELEVANT_TAG_EXTRACTOR不考慮<!-->作為注釋開頭來固定Heritrix。 這應該工作:

 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM