Как получить значения текста в диапазоне с помощью Puppeteer - PullRequest
0 голосов
/ 18 апреля 2020

Я использую Puppeteer, чтобы очистить этот сайт . Я хочу l oop над каждой цитатой и создать массив объектов с 3 значениями каждое: цитата, по, категории. Мне трудно вытащить текст span из каждого div. Вот что у меня есть:

        const quotes = await page.evaluate(() => {
        const grabFromDiv = (div, classname) => div 
        .querySelector(`div.${classname}`)
        .innerText 
        .trim()

        //our selectors 
        const quote_selector = 'div.quote'

        //store our data in an array of objects 
        const data = []

        //get all quotes
        const quoteDivs = document.querySelectorAll(quote_selector)

        //loop over each quote block, creating objects 
        for (const span of quoteDivs) {
            data.push({
                quote: grabFromDiv(span, 'text'),
                by: grabFromDiv(small, 'author'),
                category: grabFromDiv(a, 'tag'),
            })
        }
        //send the data back into the quotes variable
        return data 
    })

На данный момент он возвращает массив этих объектов:

  {
     "quote": null,
     "by": null,
     "category": null
  }

1 Ответ

0 голосов
/ 19 апреля 2020

Селекторы, которые вы используете для выбора полей, неверны.

const grabFromDiv = (div, selector) => Array.from(div 
    .querySelectorAll(selector), (el => el.innerText.trim()));

for (const span of quoteDivs) {
    data.push({
        quote: grabFromDiv(span, 'span.text'),
        by: grabFromDiv(span, 'small.author'),
        category: grabFromDiv(span, 'a.tag'),
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...