想用nodejs抓取一些网页,我第一反应是使用http模块,比如抓取百度首页:varhttp=require('http');varreq=http.request('http://www.baidu.com/',function(res){res.setEncoding('utf8');res.on('data',function(chunk){//响应内容console.log(chunk)});});req.end(function(){//console.log('连接关闭');});但是,这仅限于简单的抓取html,这是相当有限的。如果你要的内容不是html的,而是js动态生成的,那么http模块不能满足你的需求;如果网页是gbk编码的,上面的方法就不太好用了。如果是https,上面的方法也要改一下。我渴望有一个使用起来不麻烦的更强大的工具。PhantomJs可以用PhantomJs解决以上问题。PhantomJs是一个没有界面的浏览器。Installusingcnpm安装PhantomJS:cnpminstallphantomjs--save-dev这里我没有选择全局安装,因为如果是全局安装,别人使用我的源码的时候,不知道有这样的依赖,而且项目将不会运行。如果你也选择本地安装,那么你需要在package.json中的脚本中添加一段:"phantomjs":"node_modules/.bin/phantomjs"等等。这将在以后使用。到这里,安装就完成了。为了编写代码,我们创建了一个任意名称的新文件。这里我新建一个main.js:varwebpage=require('webpage');varpage=webpage.create();page.open('http://www.baidu.com/',function(status){vardata;if(status==='fail'){console.log('打开页面失败!');}else{console.log(page.content);//打印输出HTML内容}page.close();//关闭网页phantom.exit();//退出phantomjs命令行});这里有个网页模块,我们刚好没有这个模块,为什么可以参考这个模块???当然,不能引用。如果我们使用nodemain.js运行这段代码,它不会运行。我们应该这样运行这段代码:npmrunphantomjsmain.js其中npmrunphantomjs对应我们之前在package.json中添加的命令非常方便,几乎和http模块一样方便。page.content是html代码,这个page对象有很多属性,比较强大。此时,您已经开始了。如果想了解更多,可以去phantomjs官网看文档。
