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 相关文章推荐
JS动画效果代码3
Apr 03 Javascript
!DOCTYPE声明对JavaScript的影响分析
Apr 12 Javascript
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
Aug 28 Javascript
JS实现简单的tab切换选项卡效果
Sep 21 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
Jun 28 Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 Javascript
快速解决处理后台返回json数据格式的问题
Aug 07 Javascript
Vue-Cli项目优化操作的实现
Oct 27 Javascript
JS求解两数之和算法详解
Apr 28 Javascript
javascript开发实现贪吃蛇游戏
Jul 31 Javascript
基于Vant UI框架实现时间段选择器
Dec 24 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解析html类库simple_html_dom的转码bug
2014/05/22 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
python实现多线程网页下载器
2018/04/15 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
应用艺术毕业生的自我评价
2013/12/04 职场文书
考试不及格的检讨书
2014/01/22 职场文书
高中军训感言600字
2014/03/11 职场文书
买卖车协议书
2014/04/21 职场文书
大学生社会实践评语
2014/04/25 职场文书
家属答谢词
2015/01/05 职场文书
2015教师节通讯稿
2015/07/20 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书