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

 更新时间:2018年10月26日 11:54:02   作者:SP-Lyu  
这篇文章主要介绍了如何用Node写页面爬虫的工具集,主要介绍了三种方法,分别是Puppeteer、cheerio和Auto.js,感兴趣的小伙伴们可以参考一下

最近做了几个写爬虫的小项目(从页面端到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
中文文档
社区

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

您可能感兴趣的文章:

相关文章

  • nodejs实现一个word文档解析器思路详解

    nodejs实现一个word文档解析器思路详解

    这篇文章主要介绍了nodejs实现一个word文档解析器的思路详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • Node.js中路径处理模块path详解

    Node.js中路径处理模块path详解

    相信大家都知道在nodejs中,path是个使用频率很高,但却让人又爱又恨的模块。因为部分文档说的不够清晰,还有部分因为接口的平台差异性。本文就给大家详细介绍下关于Node.js中的路径处理模块path,希望能对大家学习或者使用模块path有所帮助,下面来一起看看吧。
    2016-11-11
  • Node.js模块化的使用详细介绍

    Node.js模块化的使用详细介绍

    nodejs中的模块化是指将每个js文件会被认为单独一个的模块。模块之间是互相不可见的。如果一个模块需要使用另一个模块,那么需要通过指定语法来引入要使用的模块,而且只能使用引入模块所暴露的内容
    2022-08-08
  • 手把手教你把nodejs部署到linux上跑出hello world

    手把手教你把nodejs部署到linux上跑出hello world

    本篇文章主要介绍了手把手教你把nodejs部署到linux上跑出hello world,非常具有实用价值,需要的朋友可以参考下
    2017-06-06
  • node express如何实现json转Excel

    node express如何实现json转Excel

    这篇文章主要介绍了node express如何实现json转Excel问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • node.js中的fs.createWriteStream方法使用说明

    node.js中的fs.createWriteStream方法使用说明

    这篇文章主要介绍了node.js中的fs.createWriteStream方法使用说明,本文介绍了fs.createWriteStream方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • Node发出HTTP POST请求的方法实例小结

    Node发出HTTP POST请求的方法实例小结

    这篇文章主要介绍了Node发出HTTP POST请求的方法,结合实例形式总结分析了三种常用的post请求操作方法,以及相关库操作注意事项,需要的朋友可以参考下
    2023-05-05
  • 创建简单的node服务器实例(分享)

    创建简单的node服务器实例(分享)

    下面小编就为大家带来一篇创建简单的node服务器实例(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Node.js 操作本地文件及深入了解fs内置模块

    Node.js 操作本地文件及深入了解fs内置模块

    这篇文章主要介绍了Node.js 操作本地文件及深入了解fs内置模块,node.js作为服务端应用,肯定少不了对本地文件的操作,像创建一个目录、创建一个文件、读取文件内容等都是我们开发中经常需要用到的功能
    2022-09-09
  • nodejs微信开发之接入指南

    nodejs微信开发之接入指南

    这篇文章主要介绍了nodejs微信开发之接入指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03

最新评论