如何用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 相关文章推荐
jQuery 图片切换插件(代码比较少)
May 07 Javascript
JavaScript中5种调用函数的方法
Mar 12 Javascript
Js的Array数组对象详解
Feb 22 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
Feb 26 Javascript
让编辑器支持word复制黏贴、截屏的js代码
Oct 17 Javascript
浅谈vue中慎用style的scoped属性
Nov 28 Javascript
微信小程序左右滑动的实现代码
Dec 15 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
Feb 06 Javascript
js中apply()和call()的区别与用法实例分析
Aug 14 Javascript
原生js实现公告滚动效果
Jan 10 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
Aug 21 Javascript
JavaScript实现图片轮播特效
Oct 23 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中检查文件或目录是否存在的代码小结
2012/10/22 PHP
php中chdir()函数用法实例
2014/11/13 PHP
php 问卷调查结果统计
2015/10/08 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
javascript获取web应用根目录的方法
2014/02/12 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
javascript常用的设计模式
2017/02/09 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
微信小程序 生命周期函数详解
2017/05/24 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python实现画循环圆
2019/11/23 Python
python的range和linspace使用详解
2019/11/27 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
为什么python比较流行
2020/06/19 Python
python 安装移动复制第三方库操作
2020/07/13 Python
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
优秀毕业大学生推荐信
2013/11/13 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
体育教师个人总结
2015/02/09 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
公司周年庆寄语
2019/06/21 职场文书
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android