gpt4 book ai didi

javascript - 使用 cheerio 和执行逻辑迭代源页面

转载 作者:可可西里 更新时间:2023-11-01 13:25:31 34 4
gpt4 key购买 nike

我希望能够使用 cheerio 对源页面中的所有 HTML 执行一些逻辑.我不确定如何执行此操作,因为我似乎无法在 cheerio library 中找到可以执行此操作的方法。 .我认为最接近的方法是 .each() method .但是,似乎我需要先匹配一个标签。我想对每一段 HTML 执行逻辑。

这是我目前所拥有的:

    let $ = cheerio.load(pageSource);

这是我想应用于每个标签及其内容的功能:

    summarizeContent(content) {
let contentLength = content.length;
let middle = " ....... ";
if ((contentLength> this.contentSummarizeMinLength) && (contentLength < this.contentSummarizeMaxLength)) {
let chunkIndex = 0;
const increment = 5;
while (contentLength > this.contentSummarizeMinLength) {
chunkIndex += increment;
contentLength -= 2 * increment;
}
content = content.substring(0, chunkIndex) + middle + content.substr(-chunkIndex);
} else if (contentLength >= this.contentSummarizeMaxLength) {
const chunk = 20;
content = content.substring(0, chunk) + middle + content.substr(-chunk);
}
return content;
}

所以在 HTML 转换之后,如果这是我的输入,我应该有这样的输出:

<ul id="fruits">
<li class="apple">AppleAppleAppleAppleAppleAppleAppleAppleApple</li>
<li class="orange">OrangeOrangeOrangeOrangeOrangeOrangeOrange</li>
<li class="pear">PearPearPearPearPearPearPearPearPearPearPearPear</li
</ul>

输出:

<ul id="fruits">
<li class="apple">AppleApple ...... AppleApple</li>
<li class="orange">Orange ...... Orange</li>
<li class="pear">PearPear ...... PearPear</li
</ul>

<li>内的内容标签无关紧要。我只想能够将一个函数应用于 HTML 标记之间的某些内容。不需要使用 Cheerio,它是我发现我应该做这项工作的第一个库。

最佳答案

HTML 页面被组织为节点树。您需要遍历该树并汇总在传递元素节点以处理其文本节点时找到的任何文本节点。您可以使用递归函数来执行此操作。对于元素节点,您将再次调用递归函数,对于文本节点,您将调用您编写的 summarizeContent 函数。

//You can find a list of node types here: https://developer.mozilla.org/en/docs/Web/API/Node/nodeType
var TEXT_NODE_TYPE = 3,
ELEMENT_NODE_TYPE = 1;

function summarizeElementNode(node) {
node.contents().each(function(ix, el) {
var $el = $(el);
switch($el.nodeType) {
case TEXT_NODE_TYPE:
summarizeContent($el);
break;

case ELEMENT_NODE_TYPE:
summarizeElementNode($el);
break;
});
}

然后,您只需要在文档根目录上调用summarizeElementNode

var $ = cheerio.load(pageSource);
summarizeElementNode($.root());

关于javascript - 使用 cheerio 和执行逻辑迭代源页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39176526/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com