javascript - 从 NodeJs 上的字体标签中提取文本

标签 javascript web-scraping cheerio puppeteer

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

因此,在寻找解决方案时,我在网上发现了使用 puppeteer 运行该脚本的可能性,puppeteer 是一个处理 chrome 实例的 API 节点。 使用这个,即使不是最好的方式,因为我几天前发现了它,最终我获得了我需要的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();
})(); 

我确信这不是获取我需要的数据文本的最佳方式,所以如果您有一些建议,我会很乐意接受。 此外,我想知道是否可以直接使用 puppeteer 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'});

关于javascript - 从 NodeJs 上的字体标签中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51338072/

相关文章:

python - 网络抓取 imd 网站的一些问题

node.js - 使用 request 和 Cheerio 模块延迟请求

node.js - 使用cheerio从没有类的段落标签(<p>)中选择文本

javascript - 正则表达式无法检测所有 url

javascript - 无法更改 .html()

javascript - 在 Dynamics 365 中使用 Javascript 将自定义筛选器添加到使用链接实体的字段

jquery - Cheerio jquery Node js : obtaining href value

javascript - 在 D3 中使用投影进行动态简化

python - 使用 scrapy 进行网页抓取时的字符编码问题

c# - 使用 C# 和 HTMLAgility 抓取网页