2014-09-19 42 views
1

我想在我的网页上运行一个简单的刮,但我遇到的问题是,我似乎无法正确使用我的刮板选择HTML元素。我认为我正在从我的<li>正确抓取属性,但是我得到的每个对象属性的undefined值。Node Jquery Scraping问题

我期待抓住data-name,data-addressdata-url值。

scrape.js

var request = require('request'); 
var cheerio = require('cheerio'); 

request('http://personalSite.com', function (error, response, html) { 
    if (!error && response.statusCode == 200) { 
    var $ = cheerio.load(html); 

    $('li').each(function(i, element){ 

     var li = $(this).contents(); 


     var name = li.attr('name'); 
     var address = li.attr('address'); 
     var url = li.attr('url'); 


     var metadata = { 
      name : name, 
      address : address, 
      url : url 
     }; 
     console.log(metadata); 
    }); 
    } 
}); 

HTML:

<li id="v1065" data-name="Jerry's Food" data-address="5120 West 43rd Street" data-url="http://www.testsite1.com/" data-category="1"><a href="#" class="list-digital"> 
            <span class="venue-name">Jerry's Food</span><br /> 
            <span class="venue-address">5120 West 43rd Street</span> 

            </a> 
           </li>       
           <li id="v249" data-name="Accel Partners" data-address="13482 Seventh Avenue" data-url="http://www.testsite2.com" data-category="3"><a href="#" class="list-digital"> 
            <span class="venue-name">Mike's Pizza</span><br /> 
            <span class="venue-address">13482 Seventh Avenue</span>        
            </a> 
           </li>       

回答

0

随着.attr()方法,你应该使用完整的属性名

var name = li.attr('data-name'); 
var address = li.attr('data-address'); 
var url = li.attr('data-url'); 

或者你可以使用

var name = li.data('name'); 
var address = li.data('address'); 
var url = li.data('url'); 
+0

嘿@zavg,谢谢你的回答,但在尝试了你的两条建议之后,我仍然没有把undefined作为我的对象属性的值。任何想法,为什么这可能是?我没有抓住正确的数据吗? – cphill 2014-09-19 19:03:43