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 相关文章推荐
关于document.cookie的使用javascript
Apr 11 Javascript
ASP Json Parser修正版
Dec 06 Javascript
jquery蒙版控件实现代码
Dec 08 Javascript
js中将String转换为number以便比较
Jul 08 Javascript
js模仿php中strtotime()与date()函数实现方法
Aug 11 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
Jun 06 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 Javascript
Vue.js项目部署到服务器的详细步骤
Jul 17 Javascript
深入理解 Koa 框架中间件原理
Oct 18 Javascript
封装Vue Element的table表格组件的示例详解
Aug 19 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
JAVA/JSP学习系列之六
2006/10/09 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
python使用socket进行简单网络连接的方法
2015/04/29 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
中学推普周活动总结
2015/05/07 职场文书
2015年教师节主持词
2015/07/03 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
vue判断按钮是否可以点击
2022/04/09 Vue.js
MySQL池化框架学习接池自定义
2022/07/23 MySQL
Apache自带的ab压力测试工具的实现
2022/07/23 Servers