Javascript JQuery:.find()定位某些元素,但不定位其他元素
我试图将glassdoor公司的评论作为练习,并尝试学习javascript和JQuery,以便使用Javascript JQuery:.find()定位某些元素,但不定位其他元素,javascript,jquery,html,dom,web-scraping,Javascript,Jquery,Html,Dom,Web Scraping,我试图将glassdoor公司的评论作为练习,并尝试学习javascript和JQuery,以便使用puppeter。在我的脚本中,我尝试向控制台输出 审查摘要,以及 审查日期 (对于摘要和日期的html位置) 然而,由于某些原因,只有摘要会被打印到控制台,而日期则不会。我的代码有错误吗 const puppeteer = require("puppeteer"); const cheerio = require('cheerio'); // puppeteer usage as normal
puppeter
。在我的脚本中,我尝试向控制台输出
const puppeteer = require("puppeteer");
const cheerio = require('cheerio');
// puppeteer usage as normal
puppeteer.launch({ headless: false }).then(async browser => {
const page = await browser.newPage();
const navigationPromise = page.waitForNavigation();
await page.setViewport({ width: 1440, height: 794 }) ;
await page.goto('https://www.glassdoor.com/Reviews/Grubhub-Reviews-E419089.htm');
await navigationPromise;
var data = [];
const html = await page.content();
const $ = cheerio.load(html);
$(".hreview").each(function() {
console.log("\nMain scraping function happening...")
// This works
console.log($(this).find("span.summary").text());
// This does not work
console.log($(this).find("time.date").text());
});
await browser.close();
})
如果没有你的html代码,那么很难说问题出在哪里。你能给我们一个你想刮的html的例子吗?很可能您的选择器不正确,但如果不访问外部站点,很难说。一个好的问题应该是独立的,所以你不需要访问外部资源来理解它;在chrome控制台中。它完美地输出了日期。因此jQuery find肯定没有问题。您必须验证加载的html中是否存在此元素。您是否查看了保存在
html
变量中的dom?日期是否在.hreview
下?如果不是,则在最初加载html页面之后,通过javascript在实际页面加载之后加载,因此您需要在Puppeter中执行waitForFunction
,该函数在glassdoor站点中通过js设置日期后计算为true。请看这里的例子:也就是说,如果有一个独立的问题,而不是引用一个可能会改变的外部站点,那就太好了。试试console.log(html),看看元素是否存在。如果没有html代码,那么很难说问题出在哪里。你能给我们一个你试图抓取的html示例吗?很可能您的选择器不正确,但如果不访问外部站点,很难说。一个好的问题应该是独立的,所以你不需要访问外部资源来理解它;在chrome控制台中。它完美地输出了日期。因此jQuery find肯定没有问题。您必须验证加载的html中是否存在此元素。您是否查看了保存在html
变量中的dom?日期是否在.hreview
下?如果不是,则在最初加载html页面之后,通过javascript在实际页面加载之后加载,因此您需要在Puppeter中执行waitForFunction
,该函数在glassdoor站点中通过js设置日期后计算为true。请看这里的例子:也就是说,如果有一个自包含的问题,而不是引用一个可能会更改的外部站点,那将非常好。请尝试console.log(html)并查看元素是否存在。