【发布时间】:2021-09-17 20:20:02
【问题描述】:
我创建了一个脚本,使用 puppeteer 从webpage 中抓取不同作者的链接,遍历多个页面触发点击下一页按钮。该脚本似乎以正确的方式运行。
虽然这个网站的内容是静态的,但我故意在以下脚本中使用 puppeteer 只是为了了解如何解析内页的内容。
鉴于我希望深入一层以从 pages 中刮取 description。我怎样才能做到这一点?
const puppeteer = require('puppeteer');
function run (pagesToScrape) {
return new Promise(async (resolve, reject) => {
try {
if (!pagesToScrape) {
pagesToScrape = 1;
}
const browser = await puppeteer.launch({headless:false});
const [page] = await browser.pages();
await page.goto("https://quotes.toscrape.com/");
let currentPage = 1;
let urls = [];
while (currentPage <= pagesToScrape) {
let newUrls = await page.evaluate(() => {
let results = [];
let items = document.querySelectorAll('[class="quote"]');
items.forEach((item) => {
results.push({
authorUrl: 'https://quotes.toscrape.com' + item.querySelector("small.author + a").getAttribute('href'),
title: item.querySelector("span.text").innerText
});
});
return results;
});
urls = urls.concat(newUrls);
if (currentPage < pagesToScrape) {
await Promise.all([
await page.waitForSelector('li.next > a'),
await page.click('li.next > a'),
await page.waitForSelector('[class="quote"]')
])
}
currentPage++;
}
browser.close();
return resolve(urls);
} catch (e) {
return reject(e);
}
})
}
run(3).then(console.log).catch(console.error);
【问题讨论】:
-
来自网站的使用条款:“禁止数据挖掘/抓取和框架。您不得使用机器人、抓取工具、爬虫、蜘蛛或任何类似的方法、流程或工具来“数据挖掘”或以其他方式从 YP 网站收集或提取数据......”我会小心发布有关抓取网站的问题,这些网站专门禁止抓取......只是说。 Stack Overflow 不会让你失望,我也不会,但这是一个公共网站。
-
这次的网站不同了@Heretic Monkey。问题中的站点是为被抓取而创建的。谢谢。
标签: javascript node.js web-scraping puppeteer