我正在嘗試使用放置在單個<br>標簽之后的 Cheerio 獲取一些文本。
我已經嘗試過以下幾行:
let price = $(this).nextUntil('.col.search_price.discounted.responsive_secondrow').find('br').text().trim();
let price = $(this).nextUntil('.col.search_price.discounted.responsive_secondrow.br').text().trim();
這是我要抓取的 HTML:
<div class="col search_price_discount_combined responsive_secondrow" data-price-final="5039">
<div class="col search_discount responsive_secondrow">
<span>-90%</span>
</div>
<div class="col search_price discounted responsive_secondrow">
<span style="color: #888888;"><strike>ARS$ 503,99</strike></span><br>ARS$ 50,39
</div>
</div>
我想得到“ARS$ 50,39”。
uj5u.com熱心網友回復:
如果您愿意假設此文本是最后一個子元素,則可以使用.contents().last():
const cheerio = require("cheerio"); // 1.0.0-rc.12
const html = `
<div data-price-final="5039">
<div >
<span>-90%</span>
</div>
<div >
<span style="color: #888888;"><strike>ARS$ 503,99</strike></span><br>ARS$ 50,39
</div>
</div>
`;
const $ = cheerio.load(html);
const sel = ".col.search_price.discounted.responsive_secondrow";
const text = $(sel).contents().last().text().trim();
console.log(text); // => ARS$ 50,39
如果您對這個假設不滿意,您可以搜索子節點以找到第一個非空文本節點:
// ...
const text = $([...$(sel).contents()]
.find(e => e.type === "text" && $(e).text().trim()))
.text()
.trim();
console.log(text); // => ARS$ 50,39
如果文本節點緊跟<br>特定標記很重要,您可以嘗試:
// ...
const contents = [...$(sel).contents()];
const text = $(contents.find((e, i) =>
e.type === "text" && contents[i-1]?.tagName === "br"
))
.text()
.trim();
console.log(text); // => ARS$ 50,39
如果您想要所有直接文本子項,請參閱:
- 如何在 Cheerio 中獲取由不同 HTML 標簽分隔的文本
- Cheerio:獲取普通 文本節點
uj5u.com熱心網友回復:
您應該能夠通過以下方式獲得價格:
$('.col.search_price.discounted.responsive_secondrow').html().trim().split('<br>')
這將獲取元素的內部 HTML,修剪多余的空格,然后拆分<br>并獲取第二部分。
請參閱https://jsfiddle.net/b7nt0m24/3/上的示例(注意:使用具有與cheerio 類似的 API 的 jquery)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532016.html
