2012-10-05 15 views
5

Cheerio ile bazı html kazıma yapmaya çalışıyorum (jsdon'u bağımlılıkla ilgili bir sorunum yok: contextify ecc ile.) Ama meta "og: type" alamıyorum, "og: başlık "...Meta OpenGraph'e cheerio ile nasıl erişilir?

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

Yalnızca ilk metatext/html'yi aldım; charset = UTF-8 ". og'ye nasıl erişeceğinizi biliyor musunuz?

cevap

3

$('meta) nesnesinin tuşlarıyla bir bit oynamalı ve sonucunu almak için gerekli tuşların olup olmadığını kontrol etmelisiniz. .. ben biraz daha yönetilebilir olması node-crawler + şerefe kombinasyonunu bulundu

aşağıdaki kod izlemek için biraz daha kolay hale getirir: Herman'ın yanıta genişletilmesi

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 Burada öyle yapmıştım , .attribs.property nedir? Ben cheerio içinde bulamıyorum, javascript içinde yerli mi? – MkM

+0

'.attribs' öznitelikleri tutar; .attribs.property' özellik özniteliği, mevcut olmalıdır. Bu nedenle, ".attrib" ve ".attrib.property" öğelerinin değeri kontrol etmeden önce var olup olmadığını kontrol edin. Lütfen bu kodu şu url ile test edin: 'http: // geekli.st/goranhalusa/micro/23359' –

1

:

bu kodu deneyin hangi etiket öznitelikleri Diğer etiketleri eklemek için arama yapıyorsunuz ve kolayca düzeltilebiliyorsunuz.

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

Eğer almak istediğiniz özellik biliyorsanız bir basit bir çözüm olurdu: (. Eğer başlık almak istiyorum varsayarak)

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

İlgili konular