如何用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 相关文章推荐
JMenuTab简单使用说明
Mar 13 Javascript
javascript  Error 对象 错误处理
May 18 Javascript
javascript radio 联动效果
Mar 04 Javascript
基于jQuery图片平滑连续滚动插件
Apr 27 Javascript
jquery调用wcf并展示出数据的方法
Jul 07 Javascript
javascript针对DOM的应用分析(二)
Apr 15 Javascript
使用JavaScript链式编程实现模拟Jquery函数
Dec 21 Javascript
理解javascript中DOM事件
Dec 25 Javascript
vue.js学习之递归组件
Dec 13 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
Feb 22 Javascript
javascript填充默认头像方法
Feb 22 Javascript
mapboxgl实现带箭头轨迹线的代码
Jan 04 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的宝库目录--PEAR
2006/10/09 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
python操作MongoDB基础知识
2013/11/01 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
用Python配平化学方程式的方法
2019/07/20 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
python中类与对象之间的关系详解
2020/12/16 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
MySQL 数据类型详情
2021/11/11 MySQL
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript