我正在使用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/