2012-10-05 16 views
5

Estoy tratando de hacer algo de html scraping con cheerio (no puedo usar jsdon tengo un problema con la dependencia: el error con contextify ecc.) Pero no puedo obtener el meta "og: type", "og: título "...¿Cómo acceder a meta OpenGraph con cheerio?

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

obtengo solamente el primer metatext/html; charset = UTF-8 ". ¿sabes cómo acceder a og?

Respuesta

3

Tendrás que jugar un poco con las teclas del objeto $('meta) y verificar si las claves requeridas existen o no, para obtener tu resultado .

probar este código:

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); 
}); 
+0

hi , ¿qué es .attribs.property? No puedo encontrarlo en cheerio, ¿es nativo en javascript? – MkM

+0

'.attribs' tiene los atributos; '.attribs.property' el atributo de propiedad, en caso de que exista. Por lo tanto, compruebe si '.attrib' y' .attrib.property' existen antes de verificar el valor. Por favor, prueba este código con esta url: 'http: // geekli.st/goranhalusa/micro/23359' –

1

Ampliando la respuesta de Herman:.

he encontrado la combinación de node-crawler + cheerio a ser un poco más manejable el código siguiente hace que sea un poco más fácil de seguir qué atributos de etiqueta está buscando y puede modificarse fácilmente para incluir otras etiquetas. Así es como lo hice:

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

Una solución más simple sería, si se sabe que la propiedad que desea obtener: (. Asumiendo que desea obtener el título)

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

Cuestiones relacionadas