0

我正在尝试为 nodeJS 构建一个非常简单的爬虫函数 - 只是一个我可以将 URL 传递给的函数,它会将爬取的数据返回为var data.

我对 Node.js 完全陌生,无法弄清楚为什么以下内容不起作用:

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

function scrape(url) {
    console.log("Scraping: " + url);
    request(url, function(err, resp, body) {

            if (err) {
                throw err;
            }
            var html = cheerio.load(body);
            return html;
        });
}


var data = scrape('http://www.stackoverflow.com');

$ = data;
var logo = $('#hlogo a').text();
console.log(logo);

上面的代码应该返回"Stack Overflow",但显然没有。当我在控制台中运行它时,我得到一个错误:

var logo = $('#hlogo a').text();
           ^
TypeError: Property '$' of object #<Object> is not a function

任何想法为什么这对我不起作用?

4

1 回答 1

2

data将是未定义的,因为scrape函数不返回值,另外它是异步的。

您需要将逻辑更改为如下所示:

function scrape(url, oncomplete) {
    console.log("Scraping: " + url);
    request(url, function(err, resp, body) {

        if (err) {
            throw err;
        }
        var html = cheerio.load(body);
        oncomplete(html);
    });
}


scrape('http://www.stackoverflow.com', function(data) { /* do work here*/ });
于 2013-06-04T08:51:05.940 回答