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语法着色引擎(demo及打包文件下载)
Jun 13 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
Dec 30 Javascript
extjs 分页使用jsp传递数据示例
Jul 29 Javascript
javascript实现uploadify上传格式以及个数限制
Nov 23 Javascript
Vue实现双向绑定的方法
Dec 22 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
Feb 09 Javascript
javascript+html5+css3自定义提示窗口
Jun 21 Javascript
Javascript 严格模式use strict详解
Sep 16 Javascript
Vue仿支付宝支付功能
May 25 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
May 23 Javascript
javascript Canvas动态粒子连线
Jan 01 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 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加密解密函数(动态加密)
2013/06/19 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
Prototype Number对象 学习
2009/07/19 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
Vue $attrs & inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
python 实现登录网页的操作方法
2018/05/11 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
python动态规划算法实例详解
2020/11/22 Python
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
2014年幼儿园植树节活动方案
2014/03/02 职场文书
旅游安全协议书
2014/04/21 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
小学校长开学致辞
2015/07/29 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
《所见》教学反思
2016/02/23 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python