Соскоб: Соскребаются только первые изображения, остальное заполнено заполнителем.Зачем? - PullRequest
0 голосов
/ 24 ноября 2018

Я очищаю сайт вакансий с помощью JavaScript с помощью безголового браузера Puppeteer.

Я успешно получаю первые 6 элементов логотипа компании с сайта вакансий.Однако после этих первых 6 логотипов он внезапно прекратит печатать настоящие логотипы (следовательно, предоставляя мне src URL-адреса), но вместо этого введет изображение-заполнитель.

В чем может быть причина этого?

Просто к вашему сведению, я беру изображения вот так:

const image = card.querySelector('div.job-element__logo img').src

1 Ответ

0 голосов
/ 24 ноября 2018

Изображения загружаются с отложенной загрузкой.

Правильные 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,
    };
  });
});
...