我正在编写我的第一个代码来抓取几篇报纸笔记文章,但是它不起作用。我不确定是什么问题。在代码的第一部分中,我将文章的链接放在一个数组中,但是当我试图抓取每个注释时,它失败了。如果我传递一个有两个链接的数组,它可以工作,所以我猜它和变量作用域或类似的东西有关。如果有人能找出问题所在,那就太好了。由于
const puppeteer = require('puppeteer');
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const baseUrl = "https://www.lacapital.com.ar/secciones/laciudad.html/";
const numbers = Array.from({length: 2 + 1}, (_, i) => i);
const paginasCiudad = [];
for (const number of numbers) {
paginasCiudad.push(baseUrl + number);
};
console.log(paginasCiudad);
console.log("posPag");
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const urls = [];
for (let pagina of paginasCiudad) {
await page.goto(pagina);
const enlaces = await page.evaluate(() => {
const elements = document.querySelectorAll('article.big-entry-box a.cover-link, article.standard-entry-box a.cover-link, article.medium-entry a.cover-link');
const links = [];
for (let element of elements) {
links.push(element.href);
const notas = []; }
return links;
});
enlaces.forEach(element => {
urls.push(element);
});
}
//await browser.close();
console.log(urls);
try {
const csvWriter = createCsvWriter({
path: 'notas.csv',
header: [
{id: 'fecha', title: 'Fecha'},
{id: 'titulo', title: 'Título'},
{id: 'bajada', title: 'Bajada'},
{id: 'nota', title: 'Nota'},
{id: 'imagen', title: 'Imagen'},
{id: 'seccion', title: 'Sección'},
{id: 'tags', title: 'Tags'},
{id: 'link', title: 'Link'},
{id: 'fuente', title: 'Fuente'}
]
});
for (let url of urls) {
try {
const newData = {}; // objeto vacío
await page.goto(url, { waitUntil: 'load' });
newData.fecha = await page.$eval('span.nota-fecha', el => el.textContent);
newData.titulo = await page.$eval('h1.nota-title', el => el.textContent);
newData.bajada = await page.$eval('div.nota-bajada', el => el.textContent);
newData.nota = await page.$$eval('div.article-body p', els => els.map(el => el.textContent).join('n'));
newData.imagen = await page.$eval('picture.preview-img > div.extra-holder > img', el => el.getAttribute('src'));
newData.seccion = await page.$eval('div.breadcrumbs.flex-container.align-center', el => el.textContent);
newData.seccion2 = '';
newData.tags = await page.$eval('div.tags-container.flex-container.flex-wrap', el => el.textContent);
//newData.link = page.url();
newData.link2 = '';
newData.fuente = 'La Capital';
const laCapital = [];
laCapital.push(newData)
await csvWriter.writeRecords(laCapital);
console.log(newData);
console.log(`Se ha guardado la nota en un archivo .csv llamado "notas.csv"AA`);
} catch (error) {
console.log(error);
}
}
console.log(laCapital)
console.log(`Se han guardado todas las notas en un archivo .csv llamado "notas.csv"BB`);
} catch (error) {
console.error(error);
} finally {
await browser.close();
}
})();
确保url数组正确地填充了文章链接。您可以在enlace . foreach()循环中添加一个控制台日志语句,以确认url被正确地添加到数组中。
检查for…从实际正在执行的每个URL中抓取数据的循环。您可以在这个循环中添加一个控制台日志语句来确认