如何用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调用XML制作连动下拉列表框
Jun 25 Javascript
JS 自动安装exe程序
Nov 30 Javascript
JS继承 笔记
Jul 13 Javascript
关于跨站脚本攻击问题
Dec 22 Javascript
Javascript数组与字典用法分析
Dec 13 Javascript
js传值后台中文出现乱码的解决方法
Jun 30 Javascript
vue.js指令v-model实现方法
Dec 05 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
javascript 动态生成css代码的两种方法
Mar 17 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
Aug 23 Javascript
Typescript的三种运行方式(小结)
Sep 18 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数据库操作面向对象的优点
2006/10/09 PHP
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
jquery tab插件精简版分享
2011/09/10 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
python的re模块应用实例
2014/09/26 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
Django Highcharts制作图表
2016/08/27 Python
Python机器学习之决策树算法
2017/12/22 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Java软件工程师综合面试题笔试题
2013/09/08 面试题
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
高中自我评价分享
2013/12/05 职场文书
祖国在我心中演讲稿
2014/01/15 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
诚实守信演讲稿
2014/09/01 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
校园音乐节目广播稿
2015/08/19 职场文书