【问题标题】:Node Jquery Scraping Issue节点 Jquery 抓取问题
【发布时间】:2014-11-14 08:25:37
【问题描述】:

我正在尝试在我的网页上运行一个简单的抓取,但我遇到的问题是我似乎无法使用我的抓取器正确选择 HTML 元素。我以为我从<li> 中正确获取了属性,但我的每个对象属性都得到了undefined 值。

我希望获取 data-namedata-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>                           

【问题讨论】:

    标签: javascript jquery node.js request cheerio


    【解决方案1】:

    使用.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');
    

    【讨论】:

    • 嘿@zavg,谢谢你的回答,但在尝试了你的两个建议之后,我仍然没有定义为我的对象属性的值。关于为什么会这样的任何想法?我没有获取正确的数据吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多