如何用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五图轮播切换实用版
Aug 17 Javascript
JavaScript实现简单的时钟实例代码
Nov 23 Javascript
一个判断抢购时间是否到达的简单的js函数
Jun 23 Javascript
js实现两点之间画线的方法
May 12 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
封装好的javascript前端分页插件pagination
Jan 04 Javascript
webpack+vue.js实现组件化详解
Oct 12 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
May 18 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
Apr 09 Javascript
JavaScript中继承原理与用法实例入门
May 09 Javascript
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
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图像处理类库MagickWand用法实例分析
2015/05/21 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
Python如何使用字符打印照片
2020/01/03 Python
求职简历推荐信范文
2013/12/02 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
成都人事代理协议书
2014/10/25 职场文书
班主任工作实习计划
2015/01/16 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers