cheeriojsparsing问题:找不到<a>标签?

背景

我在我的NodeJs应用程序中使用cheeriojsparsingHTML页面。 目标是从该页面获取一系列链接。

问题

图书馆运作良好,但我有一个特定的一套标签(两个<a>标签)的问题,因为cheerio不会认可我的生活!

 <a href="/wiki/Orokin_Void" title="Orokin Void" class="mw-redirect">Orokin Void</a> <a href="/wiki/Storage_Containers" title="Storage Containers" class="mw-redirect">Containers</a> 

我检查并重新检查,看标签是否是理想的结构

所以,根据文档,下面的代码将打印2

 let htmlSource = '<a href="/wiki/Orokin_Void" title="Orokin Void" class="mw-redirect">Orokin Void</a> <a href="/wiki/Storage_Containers" title="Storage Containers" class="mw-redirect">Containers</a>'; let cheerioStuff = $(htmlSource).find("a").length; console.print(cheerioStuff); 

相反,它打印0 。 这是令人着迷的,至less对我而言。 同样的问题似乎与另一个stringCorpus T3 <a href="/wiki/Defense" title="Defense">Defense</a> Reward

但是,它适用于以下一个:

<div class="pi-data-value pi-font"><a href="/wiki/Orokin_Vault" title="Orokin Vault" class="mw-redirect">Orokin Vault</a></div>

或者这个:

<a href="/wiki/Lynx_Osprey" title="Lynx Osprey">Lynx Osprey</a>

在这一点上可能是这样的::

  1. 我在cheerio不喜欢的HTML源代码中有特殊的隐形邪恶字符。
  2. cheerio只会在其他标签内find<a>标签,或者如果他们是独自一人的话。

我已经testing了第一个选项,但结果没有改变。 所以现在我倾向于认为这个问题是第二个select,我觉得这是非常有限的。

它也可以是两者的结合体,在这种情况下,我被皇家的拧紧。

我怎样才能做这个工作? 有什么build议么?

find当前集合中a元素的后代,但是你的a元素不是子孙,他们当前集合(例如,顶层)。 你想过filter

 let cheerioStuff = $(htmlSource).filter("a").length; 

…或者可能是filter的组合,并find是否要涵盖两个基地:

 let elements = $(htmlSource); let cheerioStuff = elements.find("a").add(elements.filter("a")).length; 

例如,这个输出2

 "use strict"; let $ = require('cheerio'); let htmlSource = '<a href="/wiki/Orokin_Void" title="Orokin Void" class="mw-redirect">Orokin Void</a> <a href="/wiki/Storage_Containers" title="Storage Containers" class="mw-redirect">Containers</a>'; let elements = $(htmlSource); let cheerioStuff = elements.find("a").add(elements.filter("a")).length; console.log(cheerioStuff); 

而这个:

 "use strict"; let $ = require('cheerio'); let htmlSource = '<div><a href="/wiki/Orokin_Void" title="Orokin Void" class="mw-redirect">Orokin Void</a></div> <a href="/wiki/Orokin_Void" title="Orokin Void" class="mw-redirect">Orokin Void</a> <a href="/wiki/Storage_Containers" title="Storage Containers" class="mw-redirect">Containers</a>'; let elements = $(htmlSource); console.log("find: " + elements.find("a").length); console.log("filter " + elements.filter("a").length); console.log("combined: " + elements.find("a").add(elements.filter("a")).length); 

…输出:

find:1
filter2
合并:3

…因为我在div里面加了一个