Cheerio доступ к классу в DIV - PullRequest
       10

Cheerio доступ к классу в DIV

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

Хорошо, поэтому я пытаюсь очистить информацию от https://www.jamesqquick.com/blog. Вот мой функциональный код.

Здесь все отлично работает.

const axios = require('axios');
const cheerio = require('cheerio');

axios.get('https://www.jamesqquick.com/blog').then( res => {
        const talks = [];
        const $ = cheerio.load(res.data);

        $('li.card').each( (index, element) => {
        const title = 
            $(element)
            .children()
            .first()
            .text();

        const sildesLink = $(element)
            .children('a')
            .last()
            .attr('href');

        const date = $(element)
            .children('small')
            .last()
            .text();
        talks[index] = {title, sildesLink, date}
        })

        console.log(talks);
    })

Я пытаюсь вычистить описания каждого поста из блога карточка - описание и post-tag . Вот HTML для карты, к которой я обращаюсь.

<li class="card">
<a href="/blog/react-router-in-five-minutes">
<h3 class="card--title">React Router in 5 Minutes</h3>
</a>
<small class="card--date">04/06/2020</small>
<div>
<p class="card--description">I use React all of the time and always have to look up how to setup React Router. In this post, I'll show you how to setup React Router in…</p>
<small>Tags:<!-- --> 
<small class="post--tag">web-development</small>
<small class="post--tag">javascript</small>
<small class="post--tag"> react</small>
</small>
</div>
</li>

Как получить доступ к карточке - описание и пост-тегу . Вот текущий код того, как я это делаю.

        $('.card--description').each( (index, element) => {
            const desc = $(element)
            .children()
            .first()
            .text();
            test[index] = {desc}
            })

Результаты этого:

[
  { desc: '' }, { desc: '' },
  { desc: '' }, { desc: '' },
  { desc: '' }, { desc: '' },
  { desc: '' }, { desc: '' },
  { desc: '' }, { desc: '' },
  { desc: '' }, { desc: '' },
  { desc: '' }, { desc: '' },
  { desc: '' }
]

Итак, он что-то подбирает. Любая помощь будет оценена. Желаемые результаты этого кода смогут отображать все дески.

Ответы [ 2 ]

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

Я бы сделал что-то вроде:

$('li.card').get().map(li => {
  return {
    cardDescription: $(li).find('.card--description').text(),
    postTags: $(li).find('.post--tag').get().map(small => $(small).text())
  }
})
0 голосов
/ 09 апреля 2020

Вы можете просто настроить таргетинг на имя класса вместе с именем тега

$('li p.card--description').each((index, element) => {
    const desc = $(element).text();
    test[index] = { desc }
})
$('li small.post--tag').each((index, element) => {
    const desc = $(element).text();
    test2[index] = { desc }
})
...