Chrome自动改变DOM,或者不同于cheerio得到什么



所以我正在使用cheerio.js编写一个网页抓取应用程序。事情进展顺利,直到我注意到cheerio $('tbody tr')什么也没有返回,而当我在chrome中打开同一个网站时,jquery $('tbody tr')返回表体中的所有行。在cheerio的身体里,没有人。结构类似于<table><theader></theader><tr></tr><tr></tr></table>。Chrome做了这个改变吗?cheerio是否错误地传递了HTML响应?

以下3个html代码片段在html浏览器中呈现时看起来相同,但原始代码略有不同。

  1. 源代码中没有thead没有tbody

    <table><tr><td>row1</td></tr><tr><td>row2</td></tr></table>

  2. 源代码中没有tbody

    <table><thead></thead><tr><td>row1</td></tr><tr><td>row2</td></tr></table>

  3. 源代码中没有tbodythead

    <table><tbody><tr><td>row1</td></tr><tr><td>row2</td></tr></tbody></table>

根据w3schools.com浏览器可以使用thead, tbody, tfoot元素来独立于页眉和页脚来滚动表体。

浏览器还可以在使用DOM进行显示之前对其进行优化、规范化或修改,只要使用的DOM按预期呈现即可。

在您的示例中,cheerio解析器按原样读取一些源代码(node.js请求的结果)并创建其内存中的DOM表示,您可以稍后遍历/修改。

jQuery在浏览器运行时读取html浏览器解析和处理的规范化和优化的DOM。

虽然这两个dom可能不同,但它们在呈现给用户时看起来是一样的,所以这不是bug,这是一个特性

最新更新