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数组定义方法
Sep 10 Javascript
Javascript 面试题随笔
Mar 31 Javascript
jQuery easyui datagrid动态查询数据实例讲解
Feb 26 Javascript
如何正确使用javascript 来进行我们的程序开发
Jun 23 Javascript
javascript Deferred和递归次数限制实例
Oct 21 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
jQuery实现友好的轮播图片特效
Jan 12 Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
Nov 21 Javascript
JS实现类似百叶窗下拉菜单效果
Dec 30 Javascript
浅谈js中同名函数和同名变量的执行问题
Feb 12 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 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
星际争霸任务指南——人族
2020/03/04 星际争霸
php session 检测和注销
2009/03/16 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
Python中的Cookie模块如何使用
2020/06/04 Python
pandas分批读取大数据集教程
2020/06/06 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
大一自我鉴定范文
2013/12/27 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
Nginx实现会话保持的两种方式
2022/03/18 Servers
详解Vue3使用axios的配置教程
2022/04/29 Vue.js