如何用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 相关文章推荐
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
关于query Javascript CSS Selector engine
Apr 12 Javascript
script标签属性用type还是language
Jan 21 Javascript
jQuery实现的简单百分比进度条效果示例
Aug 01 Javascript
JavaScript省市区三级联动菜单效果
Sep 21 Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 Javascript
jQuery post数据至ashx实例详解
Nov 18 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
Mar 02 Javascript
基于JS实现网页中的选项卡(两种方法)
Jun 16 Javascript
浅谈react-router@4.0 使用方法和源码分析
Jun 04 Javascript
jquery.pager.js分页实现详解
Jul 29 jQuery
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 冒泡排序 交换排序法
2011/05/10 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
js精度溢出解决方案
2012/12/02 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
利用JS实现数字增长
2016/07/28 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
python字符串Intern机制详解
2019/07/01 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
python实现五子棋程序
2020/04/24 Python
五分钟演讲稿
2014/04/30 职场文书
电工实训报告总结
2014/11/05 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL