如何用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 相关文章推荐
ScrollDown的基本操作示例
Jun 09 Javascript
javascript 获取图片尺寸及放大图片
Sep 04 Javascript
JS注释所产生的bug 即使注释也会执行
Nov 19 Javascript
jquery 删除字符串最后一个字符的方法解析
Feb 11 Javascript
jQuery插件kinMaxShow扩展效果用法实例
May 04 Javascript
jquery实现图片左右切换的方法
May 07 Javascript
jQuery编程中的一些核心方法简介
Aug 14 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
Feb 20 Javascript
javascript闭包的使用之按钮切换功能
Aug 30 Javascript
node版本管理工具n包使用教程详解
Nov 09 Javascript
JQuery常用选择器功能与用法实例分析
Dec 23 jQuery
Vue OpenLayer 为地图绘制风场效果
Apr 24 Vue.js
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
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
Python离线安装PIL 模块的方法
2019/01/08 Python
python实现字符串加密成纯数字
2019/03/19 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
安全事故检讨书
2014/01/18 职场文书
文明学生标兵事迹
2014/01/21 职场文书
绿色环保标语
2014/06/12 职场文书
网络技术专业求职信
2014/07/13 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS