如何用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 相关文章推荐
构造函数+原型模式构造js自定义对象(最通用)
May 12 Javascript
js如何改变文章的字体大小
Jan 08 Javascript
jQuery+css实现的换页标签栏效果
Jan 27 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
Mar 11 Javascript
JavaScript SHA512加密算法详细代码
Oct 06 Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 Javascript
JS动态计算移动端rem的解决方案
Oct 14 Javascript
Angular 2.0+ 的数据绑定的实现示例
Aug 09 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
Aug 17 Javascript
vue多种弹框的弹出形式的示例代码
Sep 18 Javascript
JavaScript简易计算器制作
Jan 17 Javascript
js实现点击烟花特效
Oct 14 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
php猜单词游戏
2015/09/29 PHP
jQuery 1.0.2
2006/10/11 Javascript
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
你必须知道的Javascript知识点之&quot;字面量和对应类型&quot;说明介绍
2013/04/23 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
js实现二级联动简单实例
2020/01/11 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
python的即时标记项目练习笔记
2014/09/18 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
python计算二维矩形IOU实例
2020/01/18 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
员工合理化建议书
2014/05/19 职场文书
党员个人公开承诺书
2014/08/29 职场文书
材料物理专业求职信
2014/09/01 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
2016国培学习心得体会
2016/01/08 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
Python竟然能剪辑视频
2021/05/25 Python