如何用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 节点排序 2
Jan 31 Javascript
js实现局部页面打印预览原理及示例代码
Jul 03 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
Jan 07 Javascript
javascript原始值和对象引用实例分析
Apr 25 Javascript
JavaScript中for循环的使用详解
Jun 03 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
js实现匹配时换色的输入提示特效代码
Aug 17 Javascript
JS表单验证的代码(常用)
Apr 08 Javascript
jquery自动补齐功能插件flexselect用法示例
Aug 06 Javascript
vue的一个分页组件的示例代码
Dec 25 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
Aug 02 jQuery
JS实现网页端猜数字小游戏
Mar 06 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中使用TCPDF生成PDF文档实例
2014/07/01 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
犀利的js 函数集合
2009/06/11 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
python logging通过json文件配置的步骤
2020/04/27 Python
英国绿色商店:Natural Collection
2019/05/03 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
医大实习自我鉴定
2013/12/07 职场文书
保护黄河倡议书
2014/05/16 职场文书
解除劳动合同协议书
2014/09/17 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
财务统计员岗位职责
2015/04/14 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python