如何使用cheerio访问元OpenGraph?

我试图做一些html刮与cheerio(不能使用jsdon我有一个依赖的问题:与ecx调和的错误),但我不能得到元“og:type”,“og:title” …

request(Url, function(error, response, body) { var $ = cheerio.load(body); $('meta').each(function() { console.log( $('meta').attr('content')); }); }); 

我只得到第一个metatext / html; charset = UTF-8“。你知道如何访问og ??

一个更简单的解决scheme是,如果你知道你想获得哪个属性:

 var $ = cheerio.load(html); var result = $('meta[property="og:title"]').attr('content'); 

(假设你想获得标题)

你将不得不玩弄对象$('meta)的键,并检查是否存在所需的键,以获得您的结果。

试试这个代码:

 var cheerio = require('cheerio') var request = require('request') request(Url, function(error, response, body) { var $ = cheerio.load(body); var meta = $('meta') var keys = Object.keys(meta) var ogType; var ogTitle; keys.forEach(function(key){ if ( meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:type') { ogType = meta[key].attribs.content; } }); keys.forEach(function(key){ if ( meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === 'og:title') { ogTitle = meta[key].attribs.content; } }); console.log(ogType); console.log(ogTitle); }); 

扩展赫尔曼的答案:

我发现node-crawler + cheerio的组合更容易pipe理。 下面的代码使得跟踪你正在search的标签属性更容易一些,并且可以很容易地进行调整以包含其他标签。 以下是我如何做到的:

  var crawler = require('crawler'), url = require('url'); var c = new crawler({ maxConnections:10, callback:function(error,response,$) { var data = { 'og:type':null, 'og:title':null, 'og:description':null, 'og:image':null, 'twitter:title':null, 'twitter:image':null, 'twitter:description':null, 'twitter:site':null, 'twitter:creator':null, } var meta = $('meta'); var keys = Object.keys(meta); for (var s in data) { keys.forEach(function(key) { if ( meta[key].attribs && meta[key].attribs.property && meta[key].attribs.property === s) { data[s] = meta[key].attribs.content; } }) } console.log(data); } }) c.queue( [ YOUR URL HERE ] )