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 に答える