当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 如何用Node写页面爬虫的工具集

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

2018年11月05日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网