如何用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 相关文章推荐
文字幻灯片
Jun 26 Javascript
用JavaScript脚本实现Web页面信息交互
Oct 11 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
Sep 29 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
Nov 23 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
Aug 28 Javascript
全面解析标签页的切换方式
Aug 21 Javascript
vue实现登陆登出的实现示例
Sep 15 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 Javascript
Centos7 安装Node.js10以上版本的方法步骤
Oct 15 Javascript
Vue实现仿iPhone悬浮球的示例代码
Mar 13 Javascript
Element InputNumber 计数器的实现示例
Aug 03 Javascript
vue绑定class的三种方法
Dec 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生成EXCEL的东东
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
JsRender实用入门教程
2014/10/31 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
python中私有函数调用方法解密
2016/04/29 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
Python使用openpyxl复制整张sheet
2021/03/24 Python
活动策划邀请函
2014/02/06 职场文书
元旦获奖感言
2014/03/08 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript