位置: 编程技术 - 正文

从零学习node.js之简易的网络爬虫(四)(node.js入门教程)

编辑:rootadmin

推荐整理分享从零学习node.js之简易的网络爬虫(四)(node.js入门教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:怎么学node.js,node.js怎么学,nodejs怎么学,学node.js需要什么基础,学node.js需要什么基础,node js入门,学node.js需要什么基础,node.js入门教程,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

之前已经介绍了node.js的一些基本知识,下面这篇文章我们的目标是学习完本节课程后,能进行网页简单的分析与抓取,对抓取到的信息进行输出和文本保存。

爬虫的思路很简单:

确定要抓取的URL; 对URL进行抓取,获取网页内容; 对内容进行分析并存储; 重复第1步

在这节里做爬虫,我们使用到了两个重要的模块:

request : 对http进行封装,提供更多、更方便的接口供我们使用,request进行的是异步请求。更多信息可以去这篇文章上进行查看 cheerio : 类似于jQuery,可以使用$(), find(), text(), html()等方法提取页面中的元素和数据,不过若仔细比较起来,cheerio中的方法不如jQuery的多。

一、 hello world

说是hello world,其实首先开始的是最简单的抓取。我们就以cnode网站为例( 不需要登录即可访问首页和其他页面 页面都是同步渲染的,没有异步请求的问题 DOM结构清晰

代码如下:

这样的一段代码就实现了一个简单的网络爬虫,爬取到源码后,再对源码进行拆解分析,比如我们要获取首页中第1页的 问题标题,作者,跳转链接,点击数量,回复数量。通过chrome,我们可以得到这样的结构:

每个div[.cell]是一个题目完整的单元,在这里面,一个单元暂时称为$item

因此,循环div[.cell] ,就可以获取到我们想要的信息了:

二、爬取多个页面

上面我们只爬取了一个页面,怎么在一个程序里爬取多个页面呢?还是以CNode网站为例,刚才只是爬取了第1页的数据,这里我们想请求它前6页的数据(别同时抓太多的页面,会被封IP的)。每个页面的结构是一样的,我们只需要修改url地址即可。

2.1 同时抓取多个页面

从零学习node.js之简易的网络爬虫(四)(node.js入门教程)

首先把request请求封装为一个方法,方便进行调用,若还是使用console.log方法的话,会把6页的数据都输出到控制台,看起来很不方便。这里我们就使用到了上节文件操作内容,引入fs模块,将获取到的内容写入到文件中,然后新建的文件放到file目录下(需手动创建file目录):

CNode分页请求的链接: 控制同时请求的数量

我们在使用for循环后,会同时发起所有的请求,如果我们同时去请求、、个页面呢,会造成短时间内对服务器发起大量的请求,最后就是被封IP。这里我写了一个调度方法,每次同时最多只能发起5个请求,上一个请求完成后,再从队列中取出一个进行请求。

然后在 getData 中,写入文件的后面,进行dis的回调调用:

这样就实现了异步调用时控制同时请求的数量。

三、抓取需要登录的页面

比如我们在抓取CNode,百度贴吧等一些网站,是不需要登录就可以直接抓取的,那么如知乎等网站,必须登录后才能抓取,否则直接跳转到登录页面。这种情况我们该怎么抓取呢?

使用cookie。 用户登录后,都会在cookie中记录下用户的一些信息,我们在抓取一些页面,带上这些cookie,服务器就会认为我们处于登录状态,程序就能抓取到我们想要的信息。

先在浏览器上登录我们的帐号,然后在console中使用document.domain获取到所有cookie的字符串,复制到下方程序的cookie处(如果你知道哪些cookie不需要,可以剔除掉)。

同时在request中,还可以设定referer,比如有的接口或者其他数据,设定了referer的限制,必须在某个域名下才能访问。那么在request中,就可以设置referer来进行伪造。

四、保存抓取到的图片

页面中的文本内容可以提炼后保存到文本或者数据库中,那么图片怎么保存到本地呢。

图片可以使用request中的pipe方法输出到文件流中,然后使用fs.createWriteStream输出为图片。

这里我们把图片保存到以日期创建的目录中,mkdirp可一次性创建多级目录(./img///)。保存的图片名称,可以使用原名称,也可以根据自己的规则进行命名。

在对应的日期目录里(如./img////),就可以看到下载的图片了。

总结

我们这里只是写了一个简单的爬虫,针对更复杂的功能,则需要更复杂的算法的来控制了。还有如何抓取ajax的数据,我们会在后面进行讲解。

标签: node.js入门教程

本文链接地址:https://www.jiuchutong.com/biancheng/376381.html 转载请保留说明!

上一篇:从零学习node.js之文件操作(三)(怎么学node.js)

下一篇:基于Nodejs利用socket.io实现多人聊天室(socketio nodejs)

  • 增量留抵税额会计处理
  • 金税四期可以查个人账户吗
  • 已暂估入库原材料,确认收不到发票怎么调账
  • 工程用车折旧年限
  • 股东借款怎么转为利润分配
  • 什么叫欠账
  • 技术合同免税备案流程2022年
  • 没经营的个体户营业执照怎么注销
  • 增值税专用发票抵扣期限
  • 预售房款预缴增值税
  • 周转材料低值易耗品科目借方登记低值易耗品的减少
  • 会计档案交接怎么填写
  • 上月未计提税金,下月怎么做分录
  • 个人承包业务是否合法
  • 从银行取现回单怎么取
  • 材料含税价怎么算
  • 关税应纳税额的计算方法包括
  • 免税收入的财税处理
  • 金税盘可以异地使用吗
  • 运费发票是含税还是不含税
  • 水利基金的计税依据是含税收入还是不含税收入
  • 关于企业所得税若干优惠政策的通知
  • 企业在年度中间终止经营活动的,应当
  • 外币业务汇兑损益根据业务划分为
  • 工资预支怎么做账
  • 现金为负数时怎么做账
  • 增值税发票跨年了还能用吗
  • 当月有进项税额转出怎么结转未交增值税
  • 广告公司进项税有哪些
  • 以前年度进项税额转出会计分录怎么做
  • 收到的进项发票要在多久前认证
  • 自己怎么做电脑系统
  • 开发商未出售的房子有产权证吗
  • 收到人才引进已受理的短信
  • 一次性工伤医疗补偿金怎么算
  • linux中断原理
  • gain_trickler_3202.exe 进程查询 gain_trickler_3202进程是什么文件
  • 用php做一个表格
  • 母公司收取子公司管理费的税率
  • 未分配利润转增股本要交税吗怎么交
  • 固定资产内部转移单
  • 如何利用python进行文本挖掘
  • 织梦怎么建站
  • 以货换货账务怎么处理
  • 企业公司怎么申请
  • 制造费用明细科目大全表
  • 材料成本差异的含义
  • 会务费要纳税调整吗
  • 公司交社保有什么用处
  • 净资产收益率与什么指标有关
  • 公司注销后原有未使用的包装还可以用吗怎么办
  • 哪些账户期末结账后一定无余额
  • 出口退税转免税怎么写个说明
  • 小规模纳税人收入不能超过多少
  • 长期待摊费用处置
  • 折旧年限的最新规定2021
  • 备查账依据什么登记
  • 资产减值损失是费用类科目吗
  • mysql8 存储引擎
  • mysql2003错误如何解决10061
  • MySql Error 1698(28000)问题的解决方法
  • 懒癌患者如何自救
  • xp如何查看系统位数
  • windows10version1909的10累积更新失败
  • ftp 550错误
  • csinsmnt.exe进程的作用介绍 csinsmnt是什么进程
  • quicktimeplayer.exe - quicktimeplayer是什么进程 有什么用
  • win10语音识别怎么打开
  • 根据显示的图的照片吊坠
  • window8任务栏消失了怎么办
  • glCopyBufferSubData
  • 第一个安卓项目
  • unity3d手机怎么打开
  • angularjs2
  • js如何保留一位小数
  • pycharm flask框架
  • 国家税务局公告2021年第3号
  • 国家税务定额发票票样
  • 我国为什么不推行安乐死
  • 煤炭资源税税率选煤税率多少黑龙江
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设