0

我有一个来自https://github.com/sylvinus/node-crawler的超级简单的示例代码

var Crawler = require("crawler").Crawler;

var c = new Crawler({
    "maxConnections":10,
    "callback":function(error,result,$) {
        console.log(result.body);
    }
});

c.queue("http://google.com");

输出是

<Buffer 3c 21 64 6f 63 74 79 70 65 20 68 74 6d 6c 3e 3c 68 74 6d 6c 20 69 74 65
6d 73 63 6f 70 65 3d 22 69 74 65 6d 73 63 6f 70 65 22 20 69 74 65 6d 74 79 70 65
 ...>

如果我将 Url 更改为,比如说,,c.queue("http://bing.com")我可以获得 html 文本。这种行为因网站而异,我不明白。

如果我更改console.log(result.body);console.log($('body').text());,google.com 网站会给我一些奇怪的文字,看起来不像发送到我的浏览器的文字。

如果我将 Url 更改为Pinterest.com等其他网站,我开始在jsdom.js本身中出现错误。

C:\node_modules\crawler\node_modules\crawler\node_modules\jsdom\lib\jsdom.js:256

        window.document.documentElement.appendChild(script);
                                        ^
TypeError: Cannot call method 'appendChild' of null
    at exports.env.exports.jsdom.env.processHTML (C:\node_modules\crawler\node_m
odules\crawler\node_modules\jsdom\lib\jsdom.js:256:41)
    at Array.forEach (native)
    at exports.env.exports.jsdom.env.processHTML (C:\node_modules\crawler\node_m
odules\crawler\node_modules\jsdom\lib\jsdom.js:239:18)
    at Object.exports.env.exports.jsdom.env (C:\node_modules\crawler\node_module
s\crawler\node_modules\jsdom\lib\jsdom.js:268:5)
    at exports.Crawler.self.onContent.jsd (C:\node_modules\crawler\node_modules\
crawler\lib\crawler.js:243:37)
    at exports.Crawler.self.onContent (C:\node_modules\crawler\node_modules\craw
ler\lib\crawler.js:278:29)
    at fs.readFile (fs.js:176:14)
    at Object.oncomplete (fs.js:297:15)

所以我想这是代码本身的一些错误,但如果不是,有人可以帮忙指出我的错误吗?

注意: jQueryUrl可能会添加参数new Crawler({})以使其与您的 jQuery 文件位置一起使用。

4

1 回答 1

1

如果您还没有,请查看Cheerio 。它可能会给你更一致的结果。我已经将它用于爬虫一段时间,并没有像你描述的那样出现问题。

我选择它是因为它似乎有一个更干净的设计。

于 2013-02-26T08:57:15.813 回答