Nokogiri似乎错过了一些标签..为什么?



我在以下URL的命令行中使用Nokogiri:

nokogiri 'http://www.w3schools.com/css/tryit.asp?filename=trycss_default'

当该url加载到irb会话中时,@doc变量包含解析后的HTML中的Nokogiri Node对象,但它似乎错过了所有

<script async> 

标签,尽管它捕捉到

<script> 

标签。以下是它似乎错过的异步标签:

<script async="" type="text/javascript" src="http://www.googletagservices.com/tag/js/gpt.js">    </script>
<script async="" src="//www.google-analytics.com/analytics.js"></script>
<script async="" type="text/javascript" src="http://partner.googleadservices.com/gpt/pubads_impl_48.js"></script>

并且不一致地收集CCD_ 1标签(捕获3个标签中的1个):

@doc.xpath('//iframe').each{|n| puts n.path}
/html/body/div[3]/div[2]/div/div[2]/iframe

我想知道为什么Nokogiri只是解析所有标签,并将它们作为Nokogiri对象包含在@doc数组中。

解析不熟悉的文档时,首先要检查的是errors:

>> @doc.errors
[
    [0] #<Nokogiri::XML::SyntaxError: Element script embeds close tag>,
    [1] #<Nokogiri::XML::SyntaxError: Misplaced DOCTYPE declaration>,
    [2] #<Nokogiri::XML::SyntaxError: htmlParseStartTag: misplaced <html> tag>,
    [3] #<Nokogiri::XML::SyntaxError: htmlParseStartTag: misplaced <head> tag>,
    [4] #<Nokogiri::XML::SyntaxError: htmlParseStartTag: misplaced <body> tag>
]

如果文档中存在错误,Nokogiri会尝试修复它们,就像浏览器一样,但它的知识不足以理解某些情况。这可能会导致标签丢失或错位。

有问题的文档在<textarea>标记中嵌入了一个HTML文档。这不是有效的HTML。嵌入的文档应该被编码为使用实体,这样它才能正确显示,但不会像真正的标记一样。

相关内容

  • 没有找到相关文章

最新更新