Скребок (кукловод) не отображается в моем массиве - JavaScript / реакция - PullRequest
0 голосов
/ 03 декабря 2018

Я написал веб-скребок с кукловодом.Он просматривает вакансии с портала вакансий.Я могу отобразить заголовок, положение и изображение.

Созданный массив из моего скребка выглядит следующим образом:

[{
    "id": "2018-12-03T14:12:03Z",
    "position": "Frontend Entwickler React (w/m)",
    "company": "Muster AG",
    "image": "https://www.stepstone.de/upload_de/logo/blabla.gif",
    "date": "2018-12-03T14:12:03Z",
    "href": "https://www.stepstone.de/stellenangebote--Frontend-Entwickler"
  }] 

Вот код моего скребка.js:

const fs = require('fs')
const path = require('path')
const puppeteer = require('puppeteer')

;(async () => {
  const browser = await puppeteer.launch()
  const page = await browser.newPage()
  await page.goto(
    'https://www.stepstone.de/5/ergebnisliste.html?stf=freeText&ns=1&qs=%5B%7B%22id%22%3A%22231794%22%2C%22description%22%3A%22Frontend-Entwickler%2Fin%22%2C%22type%22%3A%22jd%22%7D%2C%7B%22id%22%3A%22300000115%22%2C%22description%22%3A%22Deutschland%22%2C%22type%22%3A%22geocity%22%7D%5D&companyID=0&cityID=300000115&sourceOfTheSearchField=homepagemex%3Ageneral&searchOrigin=Homepage_top-search&ke=Frontend-Entwickler%2Fin&ws=Deutschland&ra=30'
  )

  const stepstone = await page.evaluate(() => {
    return Array.from(document.querySelectorAll('.job-element'), card => {
      const id = card.querySelector('time').getAttribute('datetime')
      const href = card
        .querySelector('.job-element__body > a')
        .getAttribute('href')
      const position = card
        .querySelector('.job-element__body__title')
        .textContent.trim()
        .replace(/^(.{45}[^\s]*).*/, '$1')
      const company = card
        .querySelector('.job-element__body__company')
        .textContent.trim()
        .replace(/^(.{20}[^\s]*).*/, '$1')
      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
      const date = card.querySelector('time').getAttribute('datetime')

      return {
        id,
        position,
        company,
        image,
        date,
        href
      }
    })
  })

  fs.writeFile(
    path.join(__dirname, 'src/stepstone.json'),
    JSON.stringify(stepstone),
    err => {
      if (err) {
        console.error(err)
      } else {
        console.log('Great, it worked!')
      }
    }
  )

  await browser.close()
})()

Мой подход: После очистки заголовка, должности и т. д. Я также хочу включить сведения о вакансии.Поэтому я сказал своему скребку перейти по ссылке href каждого элемента задания в массиве, где хранится эта информация.

И по этой ссылке возьмите классы заданий, как и выше.Поэтому я попытался отобразить вышеуказанный массив и сказать скребку, чтобы он брал элементы из каждой ссылки href, например:

stepstone.map(async stone => {
        const page = await browser.newPage()
        await page.goto(stone.href)
        const details = await page.evaluate(() => {
          return document.querySelector('card__body')
        })
        return {
          ...stone,
          details
        }
      })

Моя проблема: Однако файл JSON необновить с помощью ключа «детали» (который должен содержать информацию от 'card__body').

Есть предложения?Thx!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...