【问题标题】:cheerio .text() returns empty stringCheerio .text() 返回空字符串
【发布时间】:2021-10-09 01:49:42
【问题描述】:

我正在尝试用 node js 和cheerio 抓取这个 html 以从 span 标签中获取 72。但是,当我放置选择器时,它什么也不返回(空字符串)。

在这种情况下,我想要 span 标签中的 72,我会将部分代码和选择器放在下面:

首先,网站html:


<li id="TonerSupplies" data-node="TonerSupplies" class="child-row">
<div class="supplyStatusContainer" data-init="initSupplyStatusContainer(this)">
<div class="contentRow" role="gridcell">
<div class="contentHeader" role="heading">
<span class="translated" data-textid="67527" tabindex="-1">
Black Cartridge
</span>
<br>
</div>
<div class="contentBody" role="presentation">
<div class="progress" role="presentation" tabindex="" data-deviceid="8-1">
<div class="progress-inner BlackGauge" role="img" title="72%" aria-labelledby="72%">
<div class="progress-slider" style="width: 166px; overflow: hidden;">
<span class="dataText">72</span>
</div>
</div> </div>
</div>
</div>
</div>
</li>

在我发布这个问题之前,我真的尝试查找 Cheerio 和 jQuery 选择器,但我找不到任何可以帮助我的东西。

这是我的代码:

const cheerio = require('cheerio');
const request = require('request');


request({
    method: 'GET',
    url: `http://exmaple.com/`
}, (err, res, body) => {

    if (err) return console.error(err);

    let $ = cheerio.load(body);

   

    let TonerLevel = 'empty';

    TonerLevel = $('#TonerSupplies > div > div > div.contentBody > div > div > div > span');

    console.log(TonerLevel.text());
});


感谢您对如何获得“72”的帮助和建议

如果我也可以获取属性“标题”,我将获取墨粉级别,但是当我使用选择器然后TonerLevel.attr('title') 时返回未定义@

它适用于其他一些元素。

【问题讨论】:

  • 看起来像$('.dataText').text()

标签: jquery node.js web-scraping cheerio htmlelements


【解决方案1】:

好的,我自己发现了问题。墨粉级别是从脚本加载的;因此,我使用 puppeteer 等待网站加载并获得该号码。

const page = await browser.newPage();
await page.goto(`http://ip-address`);
await page.waitForSelector('#TonerSupplies > div > div > div.contentBody > div > div > div > span');

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2020-01-27
    • 2020-07-11
    • 2015-05-25
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多