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 相关文章推荐
jquery提示 "object expected"的解决方法
Dec 13 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
Express.JS使用详解
Jul 17 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
Jun 19 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
BootStrap中Datepicker控件带中文的js文件
Aug 10 Javascript
AngularJs入门教程之环境搭建+创建应用示例
Nov 01 Javascript
几种tab切换详解
Feb 03 Javascript
在create-react-app中使用sass的方法示例
Oct 01 Javascript
如何使用puppet替换文件中的string
Dec 06 Javascript
小程序实现筛子抽奖
May 26 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
如何用python写个模板引擎
2021/01/14 Python
会展中心部门工作职责
2013/11/27 职场文书
中英文自我评价常用句型
2013/12/19 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python