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 继承的实现
Jul 09 Javascript
文本框input聚焦失焦样式实现代码
Oct 12 Javascript
兼容主流浏览器的JS复制内容到剪贴板
Dec 12 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
Aug 27 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
Aug 03 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
Dec 14 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
Jun 25 Javascript
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
VUE-Table上绑定Input通过render实现双向绑定数据的示例
Aug 27 Javascript
Vue Router的手写实现方法实现
Mar 02 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 Javascript
利用vue3+ts实现管理后台(增删改查)
Oct 30 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
处理php自动反斜杠的函数代码
2010/01/05 PHP
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
php的debug相关函数用法示例
2016/07/11 PHP
PHP中cookie知识点学习
2018/05/06 PHP
extjs两个tbar问题探讨
2013/08/08 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
Puppet的一些技巧
2018/09/17 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python bisect模块原理及常见实例
2020/06/17 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
《音乐之都维也纳》教学反思
2014/04/16 职场文书
本科生自荐信
2014/06/18 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL