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>
问题
此时可能::
- 我在 HTML 来源中有 cheerio 不喜欢的特殊隐形邪恶角色。
- cheerio 只会在其他标签中找到
<a>
个标签,或者如果它们是单独的。
我已经测试了第一个选项,但结果没有改变。所以现在我倾向于认为这个问题是第二种选择,我发现它非常有限。
也可以是两者的结合,这样我就完蛋了。
我怎样才能完成这项工作?有什么建议么?
find
查找当前集合中元素的 descendants,但你的 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
filter 2
combined: 3
...因为我在 div
.
中添加了一个
背景
我正在我的 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>
问题
此时可能::
- 我在 HTML 来源中有 cheerio 不喜欢的特殊隐形邪恶角色。
- cheerio 只会在其他标签中找到
<a>
个标签,或者如果它们是单独的。
我已经测试了第一个选项,但结果没有改变。所以现在我倾向于认为这个问题是第二种选择,我发现它非常有限。
也可以是两者的结合,这样我就完蛋了。
我怎样才能完成这项工作?有什么建议么?
find
查找当前集合中元素的 descendants,但你的 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 filter 2 combined: 3
...因为我在 div
.