我正在使用cheeriojs从网页上抓取内容,并使用以下HTML。
<p>
Although the PM's office could neither confirm nor deny this, the spokesperson, John Doe said the meeting took place on Sunday.
<br>
<br>
“The outcome will be made public in due course,” John said in an SMS yesterday.
<br>
<br>
</p>
我可以通过class和id标签获得感兴趣的内容,如下所示:
$('.top-stories .line.more').each(function(i, el){
//Do something…
let content = $(this).next().html();
}
一旦我捕获了感兴趣的内容,我就会使用正则表达式“清理”它,如下所示:
let cleanedContent = content.split(/<br>/).join(' \n ');
在空标记(<br>)
匹配的位置插入换行符。到目前为止一切都很好,直到我看下面的清洁内容:
Although the PM's office could neither confirm nor deny this, the spokesperson, Saima Shaanika said the meeting took place on Friday.
“The outcome will be made public in due course,”
根据其unicode代码,似乎存储了标点符号,也许还有其他一些字符。我可能在这方面错了,并欢迎对这一思路进行一些修改。
假设它们存储为unicode代码,是否有一个模块可以传递“cleaningContent”变量,通过将unicodes转换为人类可读的标点符号/字符?
如果这不可行,是否有更好的cheeriojs实施可以避免这种情况?我完全接受这样的观点,即我没有正确使用cherriojs,并且我会喜欢一些方向,而不是我可以尝试的新方法。
我能想到的一种方法是编写一个包含多个unicodes及其对应的unicodes的模块,然后查找匹配项,并用相应的人类可读字符替换匹配的代码。我有一些直观的感觉,某人已经完成了这个或类似的事情。我宁愿不尝试重新发明轮子。
提前致谢。
答案 0 :(得分:2)
Cheerio在内部使用htmlparser2。
因此,您可以在加载HTML字符串时使用htmlparser2的decodeEntities
选项,这样您就可以配置HTML实体的处理方式。
示例:强>
$ = cheerio.load('<ul id="fruits">...</ul>', {
decodeEntities: false
});
相关文档: