如何使用cheerio访问meta OpenGraph?

6

我正在尝试使用Cheerio进行HTML抓取(无法使用jsdon,因为存在依赖问题:contextify等错误),但是我无法获取元标签"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 吗?

3个回答

13

如果您知道要获取哪个属性,那么更简单的解决方案是:

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

(假设您想获得标题。)


4

对 Herman 的答案进行拓展:

我发现使用 node-crawler 和 cheerio 的组合更易于管理。下面的代码使得您更轻松地跟踪正在搜索的标签属性,并且可以轻松地调整以包括其他标签。这是我的做法:

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

3
您需要对对象中的键 $('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);
});

你好,.attribs.property是什么?我在Cheerio中找不到它,它是JavaScript原生的吗? - MkM
.attribs 保存属性;如果存在 .attribs.property,则为属性属性。因此,在检查值之前,请检查 .attrib.attrib.property 是否存在。请使用此 URL 测试此代码:http://geekli.st/goranhalusa/micro/23359 - Herman Junge

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