代码之家  ›  专栏  ›  技术社区  ›  etotheipi

节点js中innertext的结果

  •  0
  • etotheipi  · 技术社区  · 7 年前

    我现在正在关注中的教程 https://codeburst.io/a-guide-to-automating-scraping-the-web-with-javascript-chrome-puppeteer-node-js-b18efb9e9921 了解更多有关使用木偶师刮网站的信息。他/她使用该网站 http://books.toscrape.com/ 为此目的。我们在学习完本教程后得到的代码是

    const puppeteer = require('puppeteer');
    
    let scrape = async () => {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();
    
    await page.goto('http://books.toscrape.com/');
    await page.click('#default > div > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > div.image_container > a > img');
    await page.waitFor(1000);
    
    const result = await page.evaluate(() => {
        let title = document.querySelector('h1').innerText;
        let price = document.querySelector('.price_color').innerText;
    
        return {
            title,
            price
        }
    
    });
    
    browser.close();
    return result;
    };
    
    scrape().then((value) => {
    console.log(value); // Success!
    });
    

    运行此代码后的输出为

     { title: 'A Light in the Attic', price: '£51.77' }
    

    我理解所有这些,但我想再进一步。也就是说,我想提取价格51.77,并进一步使用该价格在同一脚本中对其进行计算。我尝试了以下操作,但失败了

    scrape().then((value) => {
    const str=value;
    const fl=parseFloat(str.substring(42,46));
    fl=2*fl;
    console.log('result is',fl);
    });
    

    我想我并不完全理解innerText函数是如何工作的,以及它真正的输出是什么。

    3 回复  |  直到 7 年前
        1
  •  1
  •   le_m    7 年前

    你的 value 不是字符串,而是具有标题和价格属性的对象。因此,您可以通过 value.price .

    或者,您可以通过解构将参数编写为 {title, price} 而不是 价值 .

    此外,您不能申报 fl 如果您希望稍后重新为其分配另一个值,请将其作为常量。

    从价格中删除货币符号和其他非数字符号的可靠方法是通过正则表达式匹配:

    scrape().then(({title, price}) => {
      let fl = +price.match(/\d+.\d+/)[0];
      fl = 2 * fl;
      console.log('result is', fl);
    });
    

    根据您的需要,您可能仍希望在 price.match 退货 null 如果没有有效的价格。

        2
  •  1
  •   Amar Pathak    7 年前

    我认为你应该用这种方式分析价格值,它应该是有效的

    scrape().then((value) => {
    const str = value;
    const fl = parseFloat(str.price);
    fl=2*fl;
    console.log('result is',fl);
    });
    
        3
  •  1
  •   F.Moez    7 年前
    scrape().then((value) => {
    const str=value;
    let fl=parseFloat(str.substring(42,46));
    fl=2*fl;
    console.log('result is',fl);
    });
    

    value是从scrape()返回的结果,所以value是

    value:{ title: 'A Light in the Attic', price: '£51.77' }
    

    要获取价格,必须使用“.” 您的代码应如下所示:

    scrape().then((value) => {
    const str=value.price
    let fl=parseFloat(str.slice(1));// slice to remove the first character
    fl=2*fl;
    console.log('result is',fl);
    });