使用cheerio的jquery不返回任何值的刮板

Posted

技术标签:

【中文标题】使用cheerio的jquery不返回任何值的刮板【英文标题】:Scraper not returning any values with jquery using cheerio 【发布时间】:2016-01-03 23:56:26 【问题描述】:

尝试抓取网站 (www.ozbargain.com) 的首页以返回 a 标记中包含对 xbox 的引用但没有任何内容返回到控制台的任何内容。我认为问题在于带有 :contains 的 if 语句。

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

url = 'http://www.ozbargain.com.au';

request(url, function(error, response, html) 
  if (!error && response.statusCode == 200) 
    var $ = cheerio.load(html);
    if($("a:contains('Xbox')").length) 
      //console.log(this);
      var el = $(this);
      var log = el.text();
      console.log(log);
     else 
      console.log('hey');
    
  
);

我要的 html 块。特别是,我想要一个标签;

<h2 class="title" id="title214252"><a href="/node/214252">Free on Xbox One, Xbox 360, PS3, PS4: Tales from the Borderlands (Episode 1)</a></h2>

【问题讨论】:

您的选择器一定是错误的。在浏览器中打开控制台,看看是否选择了您期望的项目。 这里是完整的html字符串。我将如何连接它以形成我的选择器? &lt;h2 class="title" id="title214252"&gt;&lt;a href="/node/214252"&gt;Free on Xbox One, Xbox 360, PS3, PS4: Tales from the Borderlands (Episode 1)&lt;/a&gt;&lt;/h2&gt; 【参考方案1】:

包含的 Cheerio 语法与 jQuery 略有不同。省略您正在搜索的字符串周围的单引号,它应该可以工作:

$("a:contains(Xbox)")

【讨论】:

【参考方案2】:

将选择器分配给一个变量,然后调用文本方法。

request(url, function(error, response, html) 
    if (!error && response.statusCode == 200) 
        var $ = cheerio.load(html);
        var $el = $("a:contains('Xbox')");

        if ($el.length) 
            console.log($el.text());
         else 
            console.log('hey');
        
    
);

【讨论】:

以上是关于使用cheerio的jquery不返回任何值的刮板的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Cheerio 访问包含不同属性值的 DOM 属性?

使用cheerio在没有孩子的父母中获取文本

如何在另一个对象(NodeJS、Axion、Cheerio、jQuery、JSON)中添加一个对象

Cheerio attributeStartsWith选择器

使用 Cheerio.js 在表中迭代 TR

nodejs后台页面怎么引入jquery