I'm parsing a HTML page using cheeriojs。 目标是从该页面获取一系列链接。
图书馆运作良好,但我对一组特定标签(两个<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>
此时可能是::
<a>
个标签,或者如果它们是独立的。 我已经测试了第一个选项,但结果没有改变。所以现在我倾向于认为这个问题是第二个选择,我发现这个选择非常有限。
它也可以是两者的结合,在这种情况下,我被王室搞砸了。
我该如何使这项工作?有什么建议?
答案 0 :(得分:1)
find
查找当前集合中元素的后代,但您的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
内添加了一个。