如何用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 相关文章推荐
js tab效果的实现代码
Dec 26 Javascript
用方法封装javascript的new操作符(一)
Dec 25 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
javascript动画算法实例分析
Jul 31 Javascript
JavaScript实现点击按钮字体放大、缩小
Feb 29 Javascript
JavaScript正则替换HTML标签功能示例
Mar 02 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
May 03 Javascript
详解关于react-redux中的connect用法介绍及原理解析
Sep 11 Javascript
node.js通过axios实现网络请求的方法
Mar 05 Javascript
多个vue子路由文件自动化合并的方法
Sep 03 Javascript
jQuery AJAX应用实例总结
May 19 jQuery
解决antd 表单设置默认值initialValue后验证失效的问题
Nov 02 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/12/06 PHP
介绍php设计模式中的工厂模式
2008/06/12 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
vue-cli之router基本使用方法详解
2017/10/17 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
小米5s微信跳一跳小程序python源码
2018/01/08 Python
python代码编写计算器小程序
2020/03/30 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
几个常见的软件测试问题
2016/09/07 面试题
小班秋游活动方案
2014/02/22 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
营销与策划实训报告
2014/11/05 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记