如何用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 相关文章推荐
Prototype PeriodicalExecuter对象 学习
Jul 19 Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
Aug 07 Javascript
js中document.write的那点事
Dec 12 Javascript
javascript鼠标滑过显示二级菜单特效
Nov 18 Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 Javascript
JS正则替换去空格的方法
Mar 24 Javascript
Vue.js展示AJAX数据简单示例讲解
Mar 29 Javascript
微信小程序云开发使用方法新手初体验
May 16 Javascript
VUE 自定义组件模板的方法详解
Aug 30 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 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.ini中文版
2006/10/09 PHP
桌面中心(四)数据显示
2006/10/09 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
javascript实现微信分享
2014/12/23 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
项目申报专员岗位职责
2014/07/09 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
800字作文之大雪
2019/12/04 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
python基础详解之if循环语句
2021/04/24 Python
Python打包exe时各种异常处理方案总结
2021/05/18 Python
Python matplotlib多个子图绘制整合
2022/04/13 Python