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 相关文章推荐
Extjs TriggerField在弹出窗口显示不出问题的解决方法
Jan 08 Javascript
简单实用的全选反选按钮例子
Oct 18 Javascript
IE6 hack for js 集锦
Sep 23 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
May 09 Javascript
使用堆实现Top K算法(JS实现)
Dec 25 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
Oct 25 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
常用的几个JQuery代码片段
Mar 13 Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 Javascript
详解webpack性能优化——DLL
Oct 20 Javascript
javascript高仿热血传奇游戏实现代码
Feb 22 Javascript
JS动态显示倒计时效果
Dec 12 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封装的非对称加密RSA算法示例
2018/05/28 PHP
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
python判断windows系统是32位还是64位的方法
2015/05/11 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python日期时间Time模块实例详解
2019/04/15 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
财务管理专业推荐信
2013/11/19 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
餐饮投资计划书
2014/04/25 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
红旗渠导游词
2015/02/09 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis