【发布时间】:2019-03-27 10:02:15
【问题描述】:
所以我正在尝试使用 Puppeteer 抓取网站。我要获取的所有数据都在多个表中。具体来说,我正在尝试从单个表中获取数据。我能够使用非常冗长的.querySelector(table.myclass ~ table.myclass) 获取特定表,所以现在我的问题是,我的代码正在获取每个表的第一项(从正确的表开始,即第二个表),但我不能找不到方法让它只抓取第二个表中的所有数据。
const puppeteer = require('puppeteer');
const myUrl = "https://coolurl.com";
(async () => {
const browser = await puppeteer.launch({
headless: true
});
const page = (await browser.pages())[0];
await page.setViewport({
width: 1920,
height: 926
});
await page.goto(myUrl);
let gameData = await page.evaluate(() => {
let games = [];
let gamesElms = document.querySelectorAll('table.myclass ~ table.myclass');
gamesElms.forEach((gameelement) => {
let gameJson = {};
try {
gameJson.name = gameelement.querySelector('.myclass2').textContent;
} catch (exception) {
console.warn(exception);
}
games.push(gameJson);
});
return games;
})
console.log(gameData);
browser.close();
})();
【问题讨论】:
-
document.querySelectorAll('table.myclass ~ table.myclass')抓取除第一个表之外的所有表。.querySelector(table.myclass ~ table.myclass)只返回第一个匹配的元素(也就是第二个表) -
@marzelin 谢谢!不敢相信我没有发现。
-
@marzelin,应该作为答案发布吗? :D
标签: javascript node.js web-crawler google-chrome-devtools puppeteer