如何用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 firefox兼容ie的dom方法脚本
May 18 Javascript
JQuery 遮罩层实现(mask)实现代码
Jan 09 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
Aug 13 Javascript
JS组件Bootstrap Select2使用方法详解
Apr 17 Javascript
jQuery实现的无限级下拉菜单功能示例
Sep 12 Javascript
Angular.js之作用域scope'@','=','&amp;'实例详解
Feb 28 Javascript
HTML的select控件美化
Mar 27 Javascript
vue element项目引入icon图标的方法
Jun 06 Javascript
Bootstrap Table列宽拖动的方法
Aug 15 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 Javascript
解决ele ui 表格表头太长问题的实现
Nov 13 Javascript
node使用async_hooks模块进行请求追踪
Jan 28 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
php分页示例代码
2007/03/19 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
Python中获取对象信息的方法
2015/04/27 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
通信工程毕业生求职信
2013/11/16 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
贷款委托书
2014/08/01 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
党员违纪检讨书
2015/05/05 职场文书
Nginx动静分离配置实现与说明
2022/04/07 Servers
2022微信温控新功能上线
2022/05/09 数码科技