【问题标题】:Scraping with Cheerio用 Cheerio 刮擦
【发布时间】:2014-08-10 16:01:23
【问题描述】:

我正在编写一个爬虫来获取 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 && response.statusCode === 200) {
    var $ = cheerio.load(html);
    $('.gamelist', 'td').each(function () {
      var links = $(this).attr('href');
      pspGames.push(links);
    });
   }
});

【问题讨论】:

    标签: jquery node.js web-scraping screen-scraping cheerio


    【解决方案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(

    【讨论】:

    • 如果我的选择器正确,我有点担心。如何封装该评级 4.9504?这是一个属性吗?
    • $(this).parents('tr').find('td').last().html()
    • 我永远不会得到那个。我正在阅读文档,但找不到与此案例类似的任何内容。为了将来参考,你是怎么想到的?顺便感谢您的帮助。另外,你为什么只定位gamelist而不是.gamelist, td
    • jQuery :) 想想 DOM 树,父母,find,最后,都与你现在所处的位置有关。阅读 jQuery 选择器,下次会更容易。
    • 上帝,我希望如此。下次我会让你骄傲的!哈哈
    【解决方案2】:

    我不确定您将如何存储评分,但也许这样的事情会有所帮助:

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

    【讨论】:

    • 我常常不得不使用哈希,解析浮动并编写条件来检查它是否高于特定评级,然后附加。我需要阅读 parent()。做得很好!
    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2020-01-09
    • 2021-09-06
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多