node.js 爬虫 异步延时问题

  1. 比方说有1万个关键词['query1', 'query2' ... ... ]

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

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

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

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


汪汪一只猫
浏览 1085回答 2
2回答

白板的微信

我们有个服务比较类似。主要用到了队列,队列是基于redis实现的,大概原理如下:实现单个任务的功能任务A实现后将数据放到到队列A中任务B从队列A中消费数据,成功则删除当前任务,失败则重新存入,任务B完成后产生的数据存储队列B任务C从队列B中消费数据,成功则删除当前任务,失败则重新存入,任务C完成后产生的数据存储队列C这样整个流程的任务呗拆分出来,业务逻辑也简单化,方便维护,并且,任务ABC都是并行计算的,且相对隔离

HUH函数

这里面涉及到的技术点如下:发出 HTTP 请求,用 http 模块的 get 或者 request 函数;分析请求到的页面数据,假设页面是 html 页面,可以用 cheerio 来解析页面的 DOM 结构,获取页面上的数据;异步流程控制,因为 node.js 是单线程异步执行的,所以你如果两个任务需要串行执行,需要进行流程控制;流程控制可以自己实现,也可以用第三方库来实现;能想到的大概就是这些,欢迎大家补充。
打开App,查看更多内容
随时随地看视频慕课网APP