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 相关文章推荐
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 Javascript
extjs 分页使用jsp传递数据示例
Jul 29 Javascript
Javascript动态创建表格及删除行列的方法
May 15 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
Oct 31 Javascript
JS HTML5拖拽上传图片预览
Jul 18 Javascript
js中如何完美的解析数据
Mar 18 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 Javascript
node中使用es6/7/8(支持性与性能)
Mar 28 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
May 10 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
javascript+css实现进度条效果
Mar 25 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
Aug 17 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
967 个函式
2006/10/09 PHP
在JavaScript中调用php程序
2009/03/09 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
php字符串截取函数用法分析
2014/11/25 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
python基础梳理(一)(推荐)
2019/04/06 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
社区工作感言
2014/02/21 职场文书
升国旗仪式主持词
2014/03/19 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
Python闭包的定义和使用方法
2022/04/11 Python