node实现爬虫的几种简易方式


Posted in Javascript onAugust 22, 2019

说到爬虫大家可能会觉得很NB的东西,可以爬小电影,羞羞图,没错就是这样的。在node爬虫方面,我也是个新人,这篇文章主要是给大家分享几种实现node

爬虫的方式。第一种方式,采用node,js中的 superagent+request + cheerio。cheerio是必须的,它相当于node版的jQuery,用过jQuery的同学会非常容易上手。它

主要是用来获取抓取到的页面元素和其中的数据信息。superagent是node里一个非常方便的、轻量的、渐进式的第三方客户端请求代理模块,用他来请求目标页面。

node中,http模块也可作为客户端使用(发送请求),第三方模块request对其使用方法进行了封装,操作更方便。以下是三者的引入方法:

node实现爬虫的几种简易方式

接下来我们开始请求要爬取的目标页面。申明目标页面比如新浪网首页:

node实现爬虫的几种简易方式

如新浪首页部分代码

node实现爬虫的几种简易方式

通过superagent请求目标网站,获取到网站内容,通过cheerio.load方法引入要解析的html
cheerio中的有关DOM操作的方式

node实现爬虫的几种简易方式

此处采用 .each(function(index,element){...})方式遍历需要的元素

node实现爬虫的几种简易方式

返回结果如下:

node实现爬虫的几种简易方式

若要将文字内容存储可采用以下方式:

引入fs模块const fs= require("fs")

引入path模块 const path=require("path")

Node.js 内置的fs模块就是文件系统模块,负责读写文件。和所有其他JS模块不同的是,fs模块同时提供了异步和同步的方法。

在上述方法中调用存储文字内容mkdirs方法

//存放数据
mkdirs('./content2',saveContent); (注: content2是新建文件名;saveContent是回调函数)

node实现爬虫的几种简易方式

文字内容最终将存储在content2中的content.txt文件中

若想存储图片可采用以下方式:

node实现爬虫的几种简易方式

第二种方式: 使用Nightmare自动化测试工具。

这里介绍一下nightmare工具的用途:

Electron可以让你使用纯JavaScript调用Chrome丰富的原生的接口来创造桌面应用。你可以把它看作一个专注于桌面应用的Node.js的变体,而不是Web服务器。

其基于浏览器的应用方式可以极方便的做各种响应式的交互

Nightmare是一个基于Electron的框架,针对Web自动化测试和爬虫,因为其具有跟PlantomJS一样的自动化测试的功能可以在页面上模拟用户的行为触发一些异步数据加载,

也可以跟Request库一样直接访问URL来抓取数据,并且可以设置页面的延迟时间,所以无论是手动触发脚本还是行为触发脚本都是轻而易举的。

const Nightmare=require("nightmare") //自动化测试包 ,处理动态页面
const nightmare=Nightmare({show: true}) show:true时,运行node可以显示内置模拟浏览器

node实现爬虫的几种简易方式

运行结束后,会在image2中存储下载的图片。

好了,文章就到这里了,有什么问题欢迎小伙伴指正。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript Event学习第六章 事件的访问
Feb 07 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
Apr 11 Javascript
基于JQuery 选择器使用说明介绍
Apr 18 Javascript
Javascript基础教程之定义和调用函数
Jan 18 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
innerHTML中标签可以换行的方法汇总
Aug 14 Javascript
js密码强度校验
Nov 10 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
Mar 14 Javascript
javascript数据结构中栈的应用之符号平衡问题
Apr 11 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
vue父组件向子组件动态传值的两种方法
Nov 11 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
Oct 26 Javascript
vue router动态路由设置参数可选问题
Aug 21 #Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 #Javascript
js时间转换毫秒的实例代码
Aug 21 #Javascript
VUE的history模式下除了index外其他路由404报错解决办法
Aug 21 #Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 #jQuery
jqGrid表格底部汇总、合计行footerrow处理
Aug 21 #Javascript
Vue仿微信app页面跳转动画效果
Aug 21 #Javascript
You might like
PHPMailer安装方法及简单实例
2008/11/25 PHP
php escape URL编码
2008/12/10 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
Laravel 队列使用的实现
2019/01/08 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
用js重建星际争霸
2006/12/22 Javascript
学习js所必须要知道的一些
2007/03/07 Javascript
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
angularJS 入门基础
2015/02/09 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
Python的Django框架中的Context使用
2015/07/15 Python
不要用强制方法杀掉python线程
2017/02/26 Python
python中reload(module)的用法示例详解
2017/09/15 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
python 基于opencv操作摄像头
2020/12/24 Python
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
农民入党思想汇报
2014/01/03 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS