如何用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 相关文章推荐
网上抓的一个特效
May 11 Javascript
JSON扫盲帖 JSON.as类教程
Feb 16 Javascript
js跳转页面方法实现汇总
Feb 11 Javascript
调整小数的格式保留小数点后两位
May 14 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
Nov 24 Javascript
vue的diff算法知识点总结
Mar 29 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
Jul 24 jQuery
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
Sep 14 Javascript
轻松解决JavaScript定时器越走越快的问题
May 13 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
Oct 11 Javascript
vue使用video插件vue-video-player的示例
Oct 03 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
python如何实现代码检查
2019/06/28 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
浅析python redis的连接及相关操作
2019/11/07 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
三年级小学生评语
2014/04/22 职场文书
篮球比赛策划方案
2014/06/05 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS