从Cheerio.js内容

时间:2016-06-27 22:39:27

标签: javascript node.js unicode cheerio

我正在使用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&apos;s office could neither confirm nor deny this, the spokesperson, Saima Shaanika said the meeting took place on Friday. 

&#x201C;The outcome will be made public in due course,&#x201D;

根据其unicode代码,似乎存储了标点符号,也许还有其他一些字符。我可能在这方面错了,并欢迎对这一思路进行一些修改。

假设它们存储为unicode代码,是否有一个模块可以传递“cleaningContent”变量,通过将unicodes转换为人类可读的标点符号/字符?

如果这不可行,是否有更好的cheeriojs实施可以避免这种情况?我完全接受这样的观点,即我没有正确使用cherriojs,并且我会喜欢一些方向,而不是我可以尝试的新方法。

我能想到的一种方法是编写一个包含多个unicodes及其对应的unicodes的模块,然后查找匹配项,并用相应的人类可读字符替换匹配的代码。我有一些直观的感觉,某人已经完成了这个或类似的事情。我宁愿不尝试重新发明轮子。

提前致谢。

1 个答案:

答案 0 :(得分:2)

Cheerio在内部使用htmlparser2。

因此,您可以在加载HTML字符串时使用htmlparser2的decodeEntities选项,这样您就可以配置HTML实体的处理方式。

示例:

$ = cheerio.load('<ul id="fruits">...</ul>', {
    decodeEntities: false
});

相关文档: