如何用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基础第一章 JavaScript与用户端
Jul 22 Javascript
JS鼠标事件大全 推荐收藏
Nov 01 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
Oct 10 Javascript
node.js中使用socket.io制作命名空间
Dec 15 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
基于Css3和JQuery实现打字机效果
Aug 11 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
May 10 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
jQuery实现表单动态添加数据并提交的方法
Jul 19 jQuery
如何用RxJS实现Redux Form
Dec 29 Javascript
JS根据json数组多个字段排序及json数组常用操作
Jun 06 Javascript
vue实现简单加法计算器
Oct 22 Javascript
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
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
python分割和拼接字符串
2013/11/01 Python
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
python数据处理实战(必看篇)
2017/06/11 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
Python自省及反射原理实例详解
2020/07/06 Python
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
简历中求职的个人自我评价
2013/12/03 职场文书
网上书店创业计划书
2014/01/12 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
Python如何让字典保持有序排列
2022/04/29 Python