Очистка с помощью Cheerio

#jquery #node.js #web-scraping #screen-scraping #cheerio

#jquery #node.js #очистка веб-страниц #очистка экрана #cheerio

Вопрос:

Я пишу скребок для получения файлов psp iso для загрузки на основе рейтинга. Мне сложно ориентироваться на каждый рейтинг. Как я могу захватить этот элемент? Я включил снимок для справки. Элемент рейтинга находится внутри tr td тега.

 var request = require('request'),
  cheerio = require('cheerio'),
  fs = require('fs');

var url = 'http://goo.gl/cc4HRc',
  pspGames = [];

request(url, function (error, response, html) {
  if (!error amp;amp; response.statusCode === 200) {
    var $ = cheerio.load(html);
    $('.gamelist', 'td').each(function () {
      var links = $(this).attr('href');
      pspGames.push(links);
    });
   }
});
 

введите описание изображения здесь

Ответ №1:

Глядя на ссылку, это выглядит так:

 <tr>
  <td>
    <a class="index gamelist" title="Corpse Party - Book of Shadows (Japan) ISO Info and Download" href="/Sony_Playstation_Portable_ISOs/Corpse_Party_-_Book_of_Shadows_(Japan)/158702">Corpse Party - Book of Shadows (Japan)</a>
  </td>
  <td align="center">4.9504</td>
</tr>
 

Вы должны просто сделать: $('.gamelist').each(

Комментарии:

1. Я был немного зациклен на том, был ли мой выбор правильным. Как я могу инкапсулировать этот рейтинг 4.9504? Является ли это атрибутом?

2. $(this).parents(‘tr’).find(‘td’).last().html()

3. Я бы никогда этого не понял. Я читал документы и не смог найти ничего похожего на этот случай. Для дальнейшего использования, как вы до этого додумались? Кстати, я ценю вашу помощь. Кроме того, почему вы просто выбрали цель gamelist вместо .gamelist, td .

4. jQuery 🙂 Просто подумайте о дереве DOM, родителях, поиске, последнем, все относится к тому, где вы находитесь в данный момент. Прочитайте о селекторах jQuery, и в следующий раз будет проще.

5. Боже, я надеюсь на это. В следующий раз ты будешь мной гордиться! ха-ха

Ответ №2:

Я не уверен, как вы собирались сохранить рейтинг, но, возможно, что-то вроде этого поможет:

 $('.gamelist').each(function () {
    var link = $(this.attr('href'));
    var rating = $(this).parent().siblings().first().text();
    pspGames.push({"link": link, "rating": rating});
});
 

Комментарии:

1. Чаще всего мне приходится использовать хэш, синтаксический анализ с плавающей запятой и писать условие, чтобы проверить, превышает ли оно определенный рейтинг, а затем добавить. Мне нужно прочитать о parent() . Отлично сделано!