使用Cheerio和jQuery时,爬虫没有返回任何值

3
尝试抓取网站首页(www.ozbargain.com)并返回任何包含Xbox引用的a标签中的内容,但无法在控制台中返回任何内容。我认为问题出在if语句中的:contains部分。
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块,特别是我想要a标签;

<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>

你的选择器可能有问题。在浏览器中打开控制台,看看是否选择了你期望的项目。 - Brandon Smith
这是完整的HTML字符串。我该如何将其连接起来以形成我的选择器?<h2 class="title" id="title214252"><a href="/node/214252">在Xbox One、Xbox 360、PS3、PS4上免费:边境之地传说(第一集)</a></h2> - Rhys Edwards
2个回答

1
将选择器分配给一个变量,然后调用text方法。
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');
        }
    }
});

0
Cheerio的contains语法与jQuery略有不同。省略在搜索字符串周围的单引号,它应该可以工作:
$("a:contains(Xbox)")

我不认为这是正确的。考虑以下代码:console.log(cheerio.load("<p>hello world</p>")("p:contains('hello')").text());。无论'hello'周围是否有引号,它都会打印出hello world - ggorlen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接