我一直在使用npm puppeteer在node.js中进行Web抓取代码的工作,以获取页面中每个新闻的url,图像和标题,但是我唯一能从中获取url,图像和标题的东西第一个新闻。
const puppeteer = require('puppeteer');
(async () => {
const brower = await puppeteer.launch();
const page = await brower.newPage();
const url = 'https://es.cointelegraph.com/category/latest';
await page.goto(url, { waitUntil: 'load' });
const datos = await page.evaluate(() => Array.from(document.querySelectorAll('.categories-page__list'))
.map( info => ({
titulo: info.querySelector('.post-preview-item-inline__title').innerText.trim(),
link: info.querySelector('.post-preview-item-inline__title-link').href,
imagen: info.querySelector('.post-preview-item-inline__figure .lazy-image__wrp img ').src
}))
)
console.log(datos);
await page.close();
await brower.close();
})()
答案 0 :(得分:0)
因为页面中只有一个.categories-page__list
,而有很多.post-preview-list-inline__item
元素。
您map
在从document.querySelectorAll('.categories-page__list')
返回的数组上,但是该数组只有一个元素,很正确,它只运行一次map
闭包。
因此,替换
document.querySelectorAll('.categories-page__list')
与
document.querySelectorAll('.post-preview-list-inline__item')
一切正常。
在这里您可以找到working example。
让我知道是否需要更多帮助