Node.JS利用PhantomJs抓取网页入门教程


Posted in Javascript onMay 19, 2017

前言

当想用 nodejs 抓取一些网页 , 我第一反应想到的就是使用 http 模块 , 比如抓取百度首页:

var http = require('http');
var req = 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 就是一个没有界面的浏览器。

安装

使用 cnpm 安装 PhantomJS 即可:

cnpm install phantomjs --save-dev

这里我没有选择全局安装 , 因为全局安装的话 , 别人使用我的源码的时候 , 不知道还有这么一个依赖 , 项目就跑不起来了。

如果你也选择局部安装 , 那么你需要在 package.json 里的 scripts 中加入一段 :

"phantomjs":"node_modules/.bin/phantomjs"

等下会用到这个的 , 到这里 , 安装算完成了。

写代码

我们新建一个文件 , 名字随意 , 这里我新建一个 main.js :

var webpage = require('webpage');
var page = webpage.create();
page.open('http://www.baidu.com/', function (status) {
 var data;
 if (status === 'fail') {
  console.log('open page fail!');
 } else {
  console.log(page.content);//打印出HTML内容
 }
 page.close();//关闭网页
 phantom.exit();//退出phantomjs命令行
});

这里有个 webpage 模块 , 我们刚才明明没有这个模块 , 为什么能引用这个模块 ???

当然不能引用 , 假如我们使用 node main.js 来跑这段代码 , 是跑不起来的 , 应该这样运行这段代码 :

npm run phantomjs main.js

这里的 npm run phantomjs 对应的就是前面我们在 package.json 里加入的那段命令 , 很方便吧 , 几乎和 http 模块一样方便。

page.content 就是 html 代码了 , 这个 page 对象还有很多的属性 , 功能更强大。

到这里 , 你就已经算入门了 , 想知道更多可以去 phantomjs 官网看看文档了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JQuery 中几个类选择器的简单使用介绍
Mar 14 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
Aug 15 Javascript
很全面的JavaScript常用功能汇总集合
Jan 22 Javascript
jQuery实现的右下角广告窗体跟随效果示例
Sep 16 Javascript
Centos7 中 Node.js安装简单方法
Nov 02 Javascript
Vue.js实现一个todo-list的上移下移删除功能
Jun 26 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
解决axios发送post请求返回400状态码的问题
Aug 11 Javascript
微信小程序使用template标签实现五星评分功能
Nov 03 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
Nov 20 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
May 19 #Javascript
angularjs封装$http为factory的方法
May 18 #Javascript
bootstrap表单示例代码分享
May 18 #Javascript
angularJS 发起$http.post和$http.get请求的实现方法
May 18 #Javascript
微信小程序 wx.request方法的异步封装实例详解
May 18 #Javascript
微信小程序中input标签详解及简单实例
May 18 #Javascript
JavaScript运动框架 链式运动到完美运动(五)
May 18 #Javascript
You might like
php gzip压缩输出的实现方法
2013/04/27 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
thinkPHP实现表单自动验证
2014/12/24 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python3基础之基本运算符概述
2014/08/13 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
四年级数学教学反思
2014/02/02 职场文书
活动总结怎么写
2014/04/28 职场文书
会议室标语
2014/06/21 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
使用python绘制横竖条形图
2022/04/21 Python