javascript - 刮擦:仅刮取第一张图像,其余图像填充占位符。为什么?
问题描述
我正在使用 JavaScript 和无头浏览器 Puppeteer 抓取工作站点。
我成功地从一个工作站点获取了前 6 个公司徽标项目。然而,在前 6 个标志之后,它会突然停止打印出真正的标志(因此,向我提供src
URL),而是输入一个占位符图像。
这可能是什么原因?
仅供参考,我正在抓取这样的图像:
const image = card.querySelector('div.job-element__logo img').src
解决方案
图像正在延迟加载。
src
尚未加载的图像的正确性存储在名为的数据属性data-src
中。您可以page.evaluate()
与 结合使用Array.from()
来过滤和抓取所有正确的图像src
值:
const images = await page.evaluate(() => {
return Array.from(document.querySelectorAll('.job-element__logo img'), e => e.dataset.src ? `https://www.stepstone.de${e.dataset.src}` : e.src);
});
如果您想为每个职位抓取职位、公司、描述和图像,您可以使用以下解决方案:
const jobs = await page.evaluate(() => {
return Array.from(document.querySelectorAll('.job-element'), card => {
const position = card.querySelector('.job-element__body__title').textContent.trim();
const company = card.querySelector('.job-element__body__company').textContent.trim();
const description = card.querySelector('.job-element__body__details').textContent.trim();
const image_element = card.querySelector('.job-element__logo img');
const image = image_element.dataset.src ? `https://www.stepstone.de${image_element.dataset.src}` : image_element.src;
return {
position,
company,
description,
image,
};
});
});
推荐阅读
- php - 如何使用 php 抓取 facebook 页面
- javascript - 如何在带有分页的列表末尾的某些项目旁边显示消息?
- python-3.x - 如何在 tkinter 中动态创建选项卡
- python - Python base32解码结果不同
- c# - 在 linq 的 join 命令中获取左连接对象
- javascript - 如何从赛普拉斯测试运行程序和控制台日志中禁用阻塞主机 URL?
- python - Selenium - 谷歌旅行刮价格历史丢失
- java - 我对 WebFlux 的行为有疑问
- laravel - 如何通过模型关系从三个相关表中获取数据?
- android - 在房间数据库中保存瞬态字段