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 相关文章推荐
关于Blog顶部的滚动导航条代码
Sep 25 Javascript
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
Aug 08 Javascript
IE bug table元素的innerHTML
Jan 11 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
Aug 23 Javascript
Jquery中使用setInterval和setTimeout的方法
Apr 08 Javascript
基于JQuery打造无缝滚动新闻步骤详解
Mar 31 Javascript
Angular JS数据的双向绑定详解及实例
Dec 31 Javascript
React如何将组件渲染到指定DOM节点详解
Sep 08 Javascript
9种改善AngularJS性能的方法
Nov 28 Javascript
vuex与组件联合使用的方法
May 10 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
js基于div丝滑实现贝塞尔曲线
Sep 23 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 POST提交数据类
2016/07/15 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
Python模拟用户登录验证
2017/09/11 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python 实现A*算法的示例代码
2018/08/13 Python
python读取文本中的坐标方法
2018/10/14 Python
django框架模板语言使用方法详解
2019/07/18 Python
python3实现微型的web服务器
2019/09/03 Python
Django框架 querySet功能解析
2019/09/04 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
python中最小二乘法详细讲解
2021/02/19 Python
自我介绍演讲稿范文
2014/08/21 职场文书
三问三解心得体会
2014/09/05 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
Python实现排序方法常见的四种
2021/07/15 Python