我正在尝试抓取一个网站,但 jsdom 和 Cheerio 都遇到了问题,这极大地改变了他们获得的 html。最值得注意的是,他们删除了一些标签,例如 table/tr/td 标签等
只需有一个本地文件说 1.html 并做:
// with cheerio -> or equivalent with jsdom
var $ = require('cheerio').load(fs.readFileSync(path));
fs.writeFileSync('2.html', $.html());
# bash
$> diff 1.html 2.html
.....
< <tr><td colspan="5"><a id="stats" name="stats"></a><div class="titlebar1" style="margin-top: 12px;margin-bottom: 4px;"><h2>Stats</h2><div class="element"><img src="img/element/10.png" /></div><div class="elementborder"><img src="img/elementborder.png" /></div></div></td></tr></table></td></div>
---
> <tr><td colspan="5"><a id="stats" name="stats"></a><div class="titlebar1" style="margin-top: 12px;margin-bottom: 4px;"><h2>Stats</h2><div class="element"><img src="img/element/10.png"></div><div class="elementborder"><img src="img/elementborder.png"></div></div></div></td></tr>
54,57c53,56
<
.....
编辑:我意识到这很可能是由于无效的 HTML,我的问题是无论如何我可以避免这种情况,就好像您在浏览器中正常查看页面元素在那里一样
更准确地说,我试图刮掉这个:http ://www.puzzledragonx.com/en/monster.asp?n=1
编辑:我意识到这也是某种浏览器问题。如果你用 wget 下载页面并用cheerio 粘贴 HTML,你会得到不同的 html
我还通过 html w3 验证器运行该页面,并且有很多关于 doctype 不允许将元素放置在某个位置的错误,但没有关于无效标记的任何错误