Очистка списка HTML в Node.js - PullRequest
0 голосов
/ 05 июля 2019

Я новичок в изучении веб-страниц и jquery.

У меня есть HTML-страница со списком сообщений. Я хочу загрузить все связанные даты (класс date), а также количество звезд, которые дал пользователь (количество классов star).

Я пробовал следующий скрипт Node.JS, используя cheerio, но пока не могу загрузить какую-либо дату. Я думаю, это связано с деревом, которое я не анализирую должным образом, но пока не могу понять.

Любой совет, пожалуйста?

HTML-страница

<body>
   <og:iframe src="...">
      <div id="page">
        <div id="container">
            <div id="content" class="clearfix">
               <div id="main2col" class="clearfix">
                  <ul class="parts-list clearfix-parent">
                    <li>
                       <div class="contents-right505">
                          <div class="clearfix">
                             <p class="info">
                                <span class="date">2019/06/18 22:02</span>
                                by&nbsp;<a id="aaaa" href="/userid/123">xxx</a>
                             </p>
                          </div>
                          <span class="value">
                              yyy:
                              <span>
                                  <span class="star"></span>
                                  <span class="star"></span>
                                  <span class="star"></span>
                                  <span class="star"></span>
                                  <span class="star"></span>
                              </span>
                          </span>
                       </div>
                    </li>

Node.JS извлечение кода

const rp = require('request-promise');
const $ = require('cheerio');

const pageParse = function (url) {
    return rp(url)
        .then(function(html) {
            $('parts-list')
            .find('li > div.contents-right505 > clearfix')
            .each(function() {
                var $el = $(this);
                console.log('date:', $el.attr('date'));
            });

1 Ответ

1 голос
/ 05 июля 2019

Да, вы правы, когда говорите, что ваши селекторы не работают должным образом. Первая проблема в том, что мы понятия не имеем, что такое parts-list. Это идентификатор? Класс? Итак, если предположить, что это идентификатор, это должно работать для вас:

const cheerio = require('cheerio');
const fetch = require('node-fetch');

const pageParse = (url) =>
    fetch(url)
        .then(response => response.text())
        .then(html => {
            const $ = cheerio.load(html);
            $('#parts-list .date').each(() => console.log($(this).html()));
            $('#parts-list .value').each(() => console.log($('span .star').length));
        });

Cheerio - это реализация jQuery, поэтому анализ html-дерева похож на написание селектора css.

[править] Просто заметил, что вы также не загружаете HTML, полученный от сканера, в cheerio. В основном это означает, что у cheerio никогда не было html-дерева. PS: написал мой пример с node-fetch, но я думаю, что ваша единственная проблема - это селектор. [/ Править]

...