cheeriojs 解析问题:找不到 <a> 标签?

cheeriojs parsing issue : cannot find <a> tag?

背景

我正在我的 NodeJs 应用程序中使用 cheeriojs 解析 HTML 页面。 objective 是从该页面获取链接数组。

问题

库运行良好,但我有一组特定的标签(两个 <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。这是令人着迷的,至少对我而言。另一个字符串 Corpus 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. 我在 HTML 来源中有 cheerio 不喜欢的特殊隐形邪恶角色。
  2. cheerio 只会在其他标签中找到 <a> 个标签,或者如果它们是单独的。

我已经测试了第一个选项,但结果没有改变。所以现在我倾向于认为这个问题是第二种选择,我发现它非常有限。

也可以是两者的结合,这样我就完蛋了。

我怎样才能完成这项工作?有什么建议么?

find 查找当前集合中元素的 descendants,但你的 a 元素不是后代,它们 当前集合(例如,顶层)。你想要 filter:

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

...或者可能是 filterfind 的组合,如果你想涵盖两个基础:

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
filter 2
combined: 3

...因为我在 div.

中添加了一个