NodeJS - 解析 HTML 并多次查找某些字符串
NodeJS - Parse HTML and find certain strings multiple times
我正在使用 puppeteer 加载网站,然后使用以下方式存储该网站的 HTML:
html = await page.evaluate('new XMLSerializer().serializeToString(document.doctype) + document.documentElement.outerHTML');
这很好用,returns html 就像它应该做的那样(长话短说不能在这个网站上使用请求)。
我现在需要做的是在 HTML 中有一个看起来像这样的块:
<ul class="styled-radio">
<li>
<input type="radio" name="variant_id" id="variant_id_118018" value="118018">
<label for="variant_id_118018">5</label>
</li>
<li>
<input type="radio" name="variant_id" id="variant_id_118019" value="118019">
<label for="variant_id_118019">6</label>
</li>
<li>
<input type="radio" name="variant_id" id="variant_id_118020" value="118020">
<label for="variant_id_118020">6,5</label>
</li>
... keeps going ...
</ul>
对于每个 variant_id_xxxxxx 我需要获取 xxxxxx 数值以及标签内部文本,然后将其存储为 xxxxxx:innerTextHere
例如,对于上面那段文本中的第一个,它将是 118018:5
如果我们可以将所有 xxxxxx:innerTextHere 值存储在数组 sizes 中,那也很好,所以上面 html 的最终结果将是是 [118018:5, 118019:6, 118020:6,5]
提前致谢:)
您可以使用节点包 Cherrio 来实现上述结果。
请参考示例代码。
const cheerio = require('cheerio')
const data = `
<ul class="styled-radio">
<li>
<input type="radio" name="variant_id" id="variant_id_118018" value="118018">
<label for="variant_id_118018">5</label>
</li>
<li>
<input type="radio" name="variant_id" id="variant_id_118019" value="118019">
<label for="variant_id_118019">6</label>
</li>
<li>
<input type="radio" name="variant_id" id="variant_id_118020" value="118020">
<label for="variant_id_118020">6,5</label>
</li>
... keeps going ...
</ul>`;
const result = [];
const $ = cheerio.load(data);
const variants = $("input[name='variant_id']");
variants.each((index, { attribs }) => {
const { id, value } = attribs;
const label = $("label[for='" + id + "']");
result.push({
id,
value,
label: label.text()
})
})
console.log(result);
我正在使用 puppeteer 加载网站,然后使用以下方式存储该网站的 HTML:
html = await page.evaluate('new XMLSerializer().serializeToString(document.doctype) + document.documentElement.outerHTML');
这很好用,returns html 就像它应该做的那样(长话短说不能在这个网站上使用请求)。
我现在需要做的是在 HTML 中有一个看起来像这样的块:
<ul class="styled-radio">
<li>
<input type="radio" name="variant_id" id="variant_id_118018" value="118018">
<label for="variant_id_118018">5</label>
</li>
<li>
<input type="radio" name="variant_id" id="variant_id_118019" value="118019">
<label for="variant_id_118019">6</label>
</li>
<li>
<input type="radio" name="variant_id" id="variant_id_118020" value="118020">
<label for="variant_id_118020">6,5</label>
</li>
... keeps going ...
</ul>
对于每个 variant_id_xxxxxx 我需要获取 xxxxxx 数值以及标签内部文本,然后将其存储为 xxxxxx:innerTextHere
例如,对于上面那段文本中的第一个,它将是 118018:5
如果我们可以将所有 xxxxxx:innerTextHere 值存储在数组 sizes 中,那也很好,所以上面 html 的最终结果将是是 [118018:5, 118019:6, 118020:6,5]
提前致谢:)
您可以使用节点包 Cherrio 来实现上述结果。 请参考示例代码。
const cheerio = require('cheerio')
const data = `
<ul class="styled-radio">
<li>
<input type="radio" name="variant_id" id="variant_id_118018" value="118018">
<label for="variant_id_118018">5</label>
</li>
<li>
<input type="radio" name="variant_id" id="variant_id_118019" value="118019">
<label for="variant_id_118019">6</label>
</li>
<li>
<input type="radio" name="variant_id" id="variant_id_118020" value="118020">
<label for="variant_id_118020">6,5</label>
</li>
... keeps going ...
</ul>`;
const result = [];
const $ = cheerio.load(data);
const variants = $("input[name='variant_id']");
variants.each((index, { attribs }) => {
const { id, value } = attribs;
const label = $("label[for='" + id + "']");
result.push({
id,
value,
label: label.text()
})
})
console.log(result);