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 来操作字符串(一些字符串函数)
Feb 15 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
JS方法调用括号的问题探讨
Jan 24 Javascript
javascript写的一个模拟阅读小说的程序
Apr 04 Javascript
javascritp添加url参数将参数加入到url中
Sep 25 Javascript
基于javascript代码实现通过点击图片显示原图片
Nov 29 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
Jul 28 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
Jul 07 Javascript
js实现3d悬浮效果
Feb 16 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 Javascript
vue 指定组件缓存实例详解
Apr 01 Javascript
Vue中的作用域CSS和CSS模块的区别
Oct 09 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使用curl实现简单模拟提交表单功能
2017/05/15 PHP
JavaScript splice()方法详解
2020/09/22 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
js获取内联样式的方法
2015/01/27 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
vue实现搜索功能
2019/05/28 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
使用python加密自己的密码
2015/08/04 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
python实现验证码识别功能
2018/06/07 Python
numpy.array 操作使用简单总结
2019/11/08 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
护士辞职信范文
2014/01/19 职场文书
食品安全工作方案
2014/05/07 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
Javascript之datagrid查询详解
2021/09/15 Javascript