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 相关文章推荐
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
JQuery $.each遍历JavaScript数组对象实例
Sep 01 Javascript
React.js入门实例教程之创建hello world 的5种方式
May 11 Javascript
jQuery简单实现中间浮窗效果
Sep 04 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
Oct 04 Javascript
详解React-Todos入门例子
Nov 08 Javascript
JS实现类似51job上的地区选择效果示例
Nov 17 Javascript
浅谈javascript中遇到的字符串对象处理
Nov 18 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
Nov 28 Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 Javascript
解决vuecli3.0热更新失效的问题
Sep 19 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
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
一个简洁的多级别论坛
2006/10/09 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
Python中的字典与成员运算符初步探究
2015/10/13 Python
基于python时间处理方法(详解)
2017/08/14 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
Tostadora意大利:定制T恤
2019/04/08 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
linux面试题参考答案(11)
2012/05/01 面试题
女大学生个人求职信
2013/12/09 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
学校就业保障协议书
2019/06/24 职场文书