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 相关文章推荐
给moz-firefox下添加IE方法和属性
Apr 10 Javascript
javascript 获取图片颜色
Apr 05 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
Sep 14 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
Nov 28 Javascript
jQuery打字效果实现方法(附demo源码下载)
Dec 18 Javascript
详解webpack+es6+angular1.x项目构建
May 02 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
Dec 28 Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
Dec 09 Javascript
JS实现简单贪吃蛇小游戏
Oct 28 Javascript
交互式可视化js库gojs使用介绍及技巧
Feb 18 Javascript
vue的项目如何打包上线
Apr 13 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 启动报错如何解决
2014/01/17 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
可以将word转成html的js代码
2010/04/11 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
python的继承知识点总结
2018/12/10 Python
python中time库的实例使用方法
2019/10/31 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
财务部岗位职责
2013/11/19 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
单位在职证明书
2014/09/11 职场文书
2014年司机工作总结
2014/11/21 职场文书
满月酒邀请函
2015/01/30 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
教师见习总结范文
2015/06/23 职场文书
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python