使用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字符串。我将如何连接它以形成我的选择器?<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>
【参考方案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 属性?
如何在另一个对象(NodeJS、Axion、Cheerio、jQuery、JSON)中添加一个对象