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 相关文章推荐
JQuery 无废话系列教程(二) jquery实战篇上
Jun 23 Javascript
20款效果非常棒的 jQuery 插件小结分享
Nov 18 Javascript
JQuery之focus函数使用介绍
Aug 20 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
Aug 12 Javascript
JS中获取函数调用链所有参数的方法
May 07 Javascript
跟我学习javascript的函数和函数表达式
Nov 16 Javascript
JavaScript的兼容性与调试技巧
Nov 22 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
Dec 12 Javascript
element-ui 本地化使用教程详解
Oct 28 Javascript
Vue 组件的挂载与父子组件的传值实例
Sep 02 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
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
PHP内核探索之变量
2015/12/22 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
零基础小白多久能学会python
2020/06/22 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
类的返射机制中的包及核心类
2016/09/12 面试题
人力资源主管岗位职责
2014/01/29 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技