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写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
Feb 09 Javascript
理解 JavaScript 预解析
Oct 25 Javascript
js如何实现设计模式中的模板方法
Jul 23 Javascript
JS截取url中问号后面参数的值信息
Apr 29 Javascript
JavaScript检测鼠标移动方向的方法
May 22 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
Sep 12 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
bootstrap导航条实现代码
Dec 28 Javascript
javascript计算对象长度的方法
Oct 25 Javascript
微信小程序实现笑脸评分功能
Nov 03 Javascript
在vue项目中封装echarts的步骤
Dec 25 Vue.js
详解如何使用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读取超大文件的实例代码
2012/04/01 PHP
php递归实现无限分类的方法
2015/07/28 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
js变量、作用域及内存详解
2014/09/23 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Python入门篇之数字
2014/10/20 Python
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
个人找工作的自我评价
2013/10/17 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
爱心捐款倡议书
2014/04/14 职场文书
工厂搬迁方案
2014/05/11 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
先进人物事迹材料
2014/12/29 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
党员转正意见怎么写
2015/06/03 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL