如何用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 相关文章推荐
JavaScript URL参数读取改进版
Jan 16 Javascript
jquery dialog键盘事件代码
Aug 01 Javascript
页面按钮禁用与解除禁用的方法
Feb 19 Javascript
构造函数+原型模式构造js自定义对象(最通用)
May 12 Javascript
简单的js表格操作
Sep 24 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
Jan 04 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
Feb 26 Javascript
vue项目中使用axios上传图片等文件操作
Nov 02 Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 Javascript
vue-cli 首屏加载优化问题
Nov 06 Javascript
node+express框架中连接使用mysql(经验总结)
Nov 10 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将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
PHP goto语句用法实例
2019/08/06 PHP
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
Python进程通信之匿名管道实例讲解
2015/04/11 Python
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
用matplotlib画等高线图详解
2017/12/14 Python
Python3处理HTTP请求的实例
2018/05/10 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
python变量的存储原理详解
2019/07/10 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
wxpython绘制音频效果
2019/11/18 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
生产厂厂长岗位职责
2013/12/25 职场文书
财务主管岗位职责
2014/02/28 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
社区务虚会发言材料
2014/10/20 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
Python实现8种常用抽样方法
2021/06/27 Python
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers