从 nodeJs 上的字体标签中提取文本

Extract text from a font tag on nodeJs

我正在使用 Cheerio 从不同网页的 html 代码中提取信息。 但是有一个网站,我想提取的文本包含在脚本标签中;因此,Cheerio 方法无法访问那段代码。

因此,在寻找解决方案时,我在网上发现了使用 puppeteer 运行 该脚本的可能性,即 API 节点来处理 chrome 实例。 使用它,即使不是最好的方式,因为我几天前发现了它,但最终我获得了我需要的 html 代码。 不幸的是,我无法提取我需要的信息。 这是我要从中提取数据的 html 代码:

<h2 class="property-price">
  <a href="blablabla">
    <strong>
      <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">Text that I wanna extract</font>
      </font>
      <small></small>
    </strong>
  </a>  
</h2>

这是我用来提取文本数据但没有成功的代码:

var cheerio = require("cheerio");
const puppeteer = require('puppeteer');
var $;
const POST_LINK_SELECTOR = 'div.property-title';

(async() => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  await page.goto('myUrl',{
    timeout: 0
  });
  $=cheerio.load(renderedContent);
  console.log($('h2.property-price').find('font').children().text());
  await browser.close();
})(); 

我确定这不是获取我需要的数据文本的最佳方式,所以如果您有任何建议,我会很乐意接受。 此外,我会知道是否可以直接使用人偶操纵者 API 来提取我需要的东西,或者我是否需要使用 Cheerio(就像我在我的情况下所做的那样,无论如何都行不通)。 谢谢

您可以在 page.evaluate 方法的帮助下,通过 puppeteer 找到所需的数据:

(async() => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto('myUrl',{waitUntil: "networkidle0"});

    const text = await page.evaluate(() => document.querySelector("h2.property-price a").textContent.trim() )
    console.log(text);

    await browser.close();
})(); 

如果您想继续使用 Cheerio 的类似 jQuery 的语法,也可以这样做,只需将 jQuery 添加到页面(如果网站不使用它) )

await page.goto(...);
await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'});