初学nodejs,关于node-crawler使用的一点问题
发布于 2年前 作者 rwing 3053 次浏览

初学nodejs,想搞个crawler,搜索了下在github上发现有个node-crawler,于是NPM,然后复制范例,编译运行,报错…(范例代码可在github的项目首页上找到)

$("#content a").each(function(a) {
^ TypeError: undefined is not a function
at Object.Crawler.callback (D:\Study\nodejs\myCrawler\index.js:10:9)
at exports.Crawler.self.onContent.jsdom.env.done (D:\Study\nodejs\myCrawler\node_modules\crawler\lib\crawler.js:212:37)
at exports.env.exports.jsdom.env.scriptComplete (D:\Study\nodejs\myCrawler\node_modules\crawler\node_modules\jsdom\lib\jsdom.js:205:39)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)

想来应该是jquery路径的问题?可是我查了貌似没问题啊,我直接NPM的什么都没改啊,麻烦大家帮忙看看可能是什么原因 环境 OS:Windows NodeJS:0.8.15 (x64)

10 回复

UP一下,求解…

把你的程序帖上来看看吧。

@leizongmin 我什么都没写。就是拿的node-crawler首页的那个范例… 所以我现在只能是认为是windows下这个版本的问题了…有空换个其他版本试试

lz问题解决了么,我也是这样

这个 node-crawler 好像依赖的库很多哦,检查一下是否都全了?猜想是否 jsdom 这个没有呢?

"dependencies": {
   "request": "2.12.0",
   "jsdom": "0.2.19",
   "generic-pool": "2.0.2",
   "htmlparser": "1.7.6",
   "underscore": "1.3.3",
   "jschardet": "1.0.2",
   "iconv-lite": "0.2.7"
}

不用试了win下面用不了。

重新看了下,确实crawler在win下有bug

// jsdom doesn't support adding local scripts,
// We have to read jQuery from the local fs
if (toQueue.jQueryUrl.match(/^(file\:\/\/|\/)/)) {

// TODO cache this
fs.readFile(toQueue.jQueryUrl.replace(/^file\:\/\//,""),"utf-8",function(err,jq) {

crawler/lib/crawler.js273行的正则匹配并不适用于win的文件系统,所以读取不到jquery.js了,试着直接改成if(true)就可以正常运行

不过还是推荐自己写crawler,这个crawler只是把几个常用的module组合起来了,过度封装了反而不够灵活

到这下载 windows下编译好的jsdom吧。 https://github.com/mihaifm/jsdom_binaries

node-crawler 在windows就fork我的版本吧,原版有问题 ,估计根本只想在unix系下跑。 https://github.com/hhuai/node-crawler

回到顶部