初学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 回复
这个 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"
}
重新看了下,确实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.js
第273行
的正则匹配并不适用于win的文件系统,所以读取不到jquery.js了,试着直接改成if(true)
就可以正常运行
到这下载 windows下编译好的jsdom吧。 https://github.com/mihaifm/jsdom_binaries
node-crawler 在windows就fork我的版本吧,原版有问题 ,估计根本只想在unix系下跑。 https://github.com/hhuai/node-crawler