如何用Node写页面爬虫的工具集


Posted in Javascript onOctober 26, 2018

最近做了几个写爬虫的小项目(从页面端到APP端的都有),在网上搜寻了一番好用的爬虫工具,做了个工具集整理:

Puppeteer

简介

Puppeteer 是一个Node库,它提供了一个高级 API 来通过 DevTools协议控制Chromium或Chrome。简单点说,就是使用Node命令控制一个无需渲染至用户界面的浏览器。

与使用 PhantomJS 搭配 Python 进行爬虫抓取类似,其原理也是去完全地模拟一个浏览器进行页面的渲染,从而抓取其中某些特定的内容。

特性

Puppeteer 可以完整地模拟一个浏览器的行为,并且可以进行截图、拦截浏览器请求、获取Cookie、通过Node注入JS代码等操作,使用Chrome浏览器开发者工具能做到的,Puppeteer也能做到。

使用起来也十分的简单,以下是官方的例子:

const puppeteer = require('puppeteer');

(async () => {
 const browser = await puppeteer.launch();
 const page = await browser.newPage();
 await page.goto('https://example.com');
 await page.screenshot({path: 'example.png'});

 await browser.close();
})();

在GitHub上放了一份自己写的使用Puppeteer获取微博cookie的代码,欢迎查看:

https://github.com/SP-Lyu/puppeteer_weibo_cookie/blob/master/index.js

由于 Puppeteer 基于Chromium,每次都需要载入页面再进行页面分析,性能十分有限,下面提到的 cheerio 则可以从另一层面解决这个问题。

文档

GitHub 

中文API地址

cheerio

cheerio 是一个轻型灵活,类jQuery的对HTML元素分析操作的工具。在进行一些server端渲染的页面以及一些简单的小页面的爬取时, cheerio 十分好用且高效。

特性

cheerio 包括了jQuery的核心子集,意味着可以直接使用jQuery的API进行元素的操控,官方的例子:

const cheerio = require('cheerio')
const $ = cheerio.load('<h2 class="title">Hello world</h2>')

$('h2.title').text('Hello there!')
$('h2').addClass('welcome')

$.html()
//=> <h2 class="title welcome">Hello there!</h2>

自己写的获取某个网站的所有a链接:

const cheerio = require('cheerio');
const get = function(){/*HTTP get请求...*/}
(async ()=>{
 const html = await get(`http://example.com`);
 const $ = cheerio.load(html);
 const $dom_arr = $('a');
 $dom_arr.each((index, elem)=>{
  const url = $(elem).attr('href') || '';
  console.log(url);
 });
})();

文档

GitHub

Auto.js

国人开发的,使用js编写代码操作Android设备的自动化工具,对于爬取某些加固措施较好的APP来说十分有用,而且有非常完善的文档以及社区,十分良心。

使用Auto.js进行设备自动化操作,再通过代理进行请求数据的获取,能绕开加固中难以破解的加密串。

特性

作为爬虫工具,好处有:

  1. 采用JavaScript作为脚本语言开发,JS开发者0成本接入;
  2. 兼容性良好,大多数任务不需要root权限;
  3. 自带界面分析工具,方便定位需要操作的元素。

从Auto.js载入某个APP,并点击进入某个频道的例子:

// 声明环境
auto();
// 设备常亮
device.keepScreenDim();
// 调起APP
launchApp('头条');
sleep(10000);
// 找到某个频道,并点击进入
var rect = text('视频').findOnce().bounds();
var x = rect.centerX();
var y = rect.centerY();
click(x, y);
// 点击进入详情,使用代理抓取并处理请求...
...

文档

GitHub
中文文档
社区

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
HTTP状态代码以及定义(解释)
Feb 02 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
Mar 04 Javascript
Three.js学习之几何形状
Aug 01 Javascript
深入理解JS DOM事件机制
Aug 06 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
Aug 23 Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 Javascript
js返回顶部实例分享
Dec 21 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
layui清除radio的选中状态实例
Nov 14 Javascript
Vue表单提交点击事件只允许点击一次的实例
Oct 23 Javascript
Array.filter中如何正确使用Async
Nov 04 Javascript
JavaScript中的宏任务和微任务详情
Nov 27 Javascript
Javascript中绑定click事件的四种方式介绍
Oct 26 #Javascript
使用webpack打包后的vue项目如何正确运行(express)
Oct 26 #Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
Oct 26 #jQuery
详解ES6 系列之异步处理实战
Oct 26 #Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
Oct 26 #Javascript
angularjs通过过滤器返回超链接的方法
Oct 26 #Javascript
js使用formData实现批量上传
Mar 27 #Javascript
You might like
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
asp批量修改记录的代码
2008/06/25 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
JS传参及动态修改页面布局
2017/04/13 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
javascript实现日历效果
2019/06/17 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python实现邮件自动发送
2019/08/10 Python
python flask中动态URL规则详解
2019/11/22 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
小学生学习感言
2014/03/10 职场文书
开学寄语大全
2014/04/08 职场文书
授权收款委托书
2014/09/23 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
教师读书活动心得体会
2016/01/14 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js