从 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'});
我正在使用 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'});