为了账号安全,请及时绑定邮箱和手机立即绑定

node.js 爬虫 异步延时问题

node.js 爬虫 异步延时问题

汪汪一只猫 2018-10-01 22:18:56
  1. 比方说有1万个关键词['query1', 'query2' ... ... ]

  2. 我要用这些关键词爬虫抓网上的数据,有两个接口,一个是获取当前query所有的页数,一个是获取当前query当前页的数据。

  3. 首先请求第一个接口拿到当前query有多少页,然后再获取每一次的数据

  4. 每次请求必须等上一个请求完成,防止网站崩溃

我用node写的,请问有解决的办法吗?


查看完整描述

2 回答

?
白板的微信

TA贡献1449条经验 获得超3个赞

我们有个服务比较类似。主要用到了队列,队列是基于redis实现的,大概原理如下:

  • 实现单个任务的功能

  • 任务A实现后将数据放到到队列A中

  • 任务B从队列A中消费数据,成功则删除当前任务,失败则重新存入,任务B完成后产生的数据存储队列B

  • 任务C从队列B中消费数据,成功则删除当前任务,失败则重新存入,任务C完成后产生的数据存储队列C

这样整个流程的任务呗拆分出来,业务逻辑也简单化,方便维护,并且,任务ABC都是并行计算的,且相对隔离


查看完整回答
反对 回复 2018-10-14
?
HUH函数

TA贡献1415条经验 获得超4个赞

这里面涉及到的技术点如下:

  1. 发出 HTTP 请求,用 http 模块的 get 或者 request 函数;

  2. 分析请求到的页面数据,假设页面是 html 页面,可以用 cheerio 来解析页面的 DOM 结构,获取页面上的数据;

  3. 异步流程控制,因为 node.js 是单线程异步执行的,所以你如果两个任务需要串行执行,需要进行流程控制;

  4. 流程控制可以自己实现,也可以用第三方库来实现;

能想到的大概就是这些,欢迎大家补充。


查看完整回答
反对 回复 2018-10-14

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信