web-scraping - 如何将数据从多页存储到json?
问题描述
谢谢你的关注,所以我写了一个小项目来抓取新闻网站并存储它们的主要文本。我尝试了许多解决方案来在我的项目中添加 json 而没有 consol.log 但总是在刮掉它之后只显示一个正文。所以我向你展示我的代码,这样你就可以帮助我如何让 json 包含所有三个新闻。
const { Cluster } = require('puppeteer-cluster');
const fs = require('fs');
const launchOptions = {
headless: false,
args: [
'--disable-gpu',
'--disable-dev-shm-usage',
'--disable-web-security',
'--disable-xss-auditor',
'--disable-accelerated-2d-canvas',
'--ignore-certifcate-errors',
'--ignore-certifcate-errors-spki-list',
'--no-zygote',
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-webgl',
],
ignoreHTTPSErrors: true,
waitUntil: 'networkidle2',
};
(async() => {
// Create a cluster with 2 workers
const cluster = await Cluster.launch({
monitor: true,
concurrency: Cluster.CONCURRENCY_PAGE,
maxConcurrency: 2,
puppeteerOptions: launchOptions,
});
// Define a task (in this case: screenshot of page)
await cluster.task(async({ page, data: url }) => {
await page.setRequestInterception(true);
page.on('request', (request) => {
if (['stylesheet', 'font', 'image', 'styles','other', 'media'].indexOf(request.resourceType()) !== -1) {
request.abort();
} else {
request.continue();
}
});
await page.goto(url);
const scrapedData = await page.$eval('div[class="entry-content clearfix"]', el => el.innerText)
fs.writeFileSync('test.json', JSON.stringify(scrapedData, null, 2))
});
// Add some pages to queue
cluster.queue('https://www.ettelaat.com/?p=526642');
cluster.queue('https://www.ettelaat.com/?p=526640');
cluster.queue('https://www.ettelaat.com/?p=526641');
// Shutdown after everything is done
await cluster.idle();
await cluster.close();
})();
解决方案
为了收集所有输出,我必须将我的 fs 放在 cluster.close 的底部
kanopyDB = []
.
.
.
kanopyDB = kanopyDB.concat(name);
.
.
.
await cluster.idle();
await cluster.close();
fs.writeFileSync('output.json', kanopyDB, 'utf8');
推荐阅读
- vb.net - 如何仅通过选择并查看标签中的结果来计算列表框中的选定项目?
- python - 如何在 pyspark 中读取大的 zip 文件
- dart - Flutter - SocketException:连接失败(操作系统错误:网络无法访问,errno = 101)
- javascript - Kendo Grid 过滤器菜单可在使用代码应用过滤器时检查过滤值
- c# - 在应用程序运行时在同一屏幕上显示(弹出)消息框
- javascript - 如何检测是否在 Promise 的 catch 块中
- c - 为什么 ”;” 不用于 for 循环中的 i++。不是所有的东西都必须以“;”结尾吗?
- android - 如何使用 JSON 结构实现登录系统?
- php - 如何使用faker dateTimeBetween 创建虚假事件?
- python - 为什么依赖 numba jitt'ed 函数的排序很重要?