nodejs抓取动态网页(连接池技术)的异步抓取抓取

优采云 发布时间: 2022-06-11 09:02

  nodejs抓取动态网页(连接池技术)的异步抓取抓取

  nodejs抓取动态网页一直都是一个技术难点,mongodb(索引)就是一个妥妥的技术好帮手,可惜不支持抓取定制化的数据源。所以将自己在写了一段时间之后也写了一篇博客详细地解释各种nodejs的功能之间的互通互用,使得抓取动态网页变得方便起来。本文主要介绍关于异步抓取和连接池技术等。异步抓取先来看看异步抓取。

  异步抓取就是说mongodb从一个请求发出到接收到返回的response实际上是从一个进程中分支走去的,程序从进程中分支走去,数据依然在内存中,这样可以更快地处理大量网页数据。我们知道,一个同步请求的过程中,请求都会被分配给线程对象中的一个实例来处理。这时候,用户输入ip地址就会被传递给线程对象对象中的一个线程上下文,由线程对象的interface方法取相应的json请求到一个内存中。

  这样,api请求到被调用的这个进程中中处理完毕之后,就可以通知服务器。但是异步方式就不同了,请求被分配给了io线程,io线程处理完毕之后,再通知数据处理线程。而且根据采用了一个主从交替来实现异步流量交互的方式。这种方式好处是,内存空间放不下内存了,则提供了vm(虚拟机)让程序可以存储和运行在内存中。除了异步抓取,io线程运行时,还可以接受服务器的任务,然后异步返回,进行数据处理(通过将整个数据源放入队列)。

  接受请求的主要方式是requestmethod,一般有get,post,put,delete,put-serially-process-headertext(字符/数据库),form-data(表单)。其中post(发起远程并发请求),put(解析远程并发请求的response数据),delete(删除远程并发请求的response数据),put-serially-process-header(数据源)是我们常用的方式。

  但是这并不完美,因为每次请求回包的时候,只有本次请求被call到的时候,内存空间才会被用到。由于异步请求是异步的,所以一般还是用的同步方式来发起请求(requestmethod),也就是将进程分割成不同的进程,再执行不同的请求处理。不过大家可以通过主从关系映射来组合不同进程之间的请求并发,从而更好地利用内存空间。

  http连接池对于一个网页抓取而言,首先需要一个requestmethod的线程对象。其次我们还需要分配不同线程对象到不同进程中执行。通过requestmethod的线程对象,我们可以建立一个用于抓取同步内容的连接池,并通过tcp连接来相互传递数据。具体如下:nodejs用到的连接池是any连接池,内部实现使用了http同步握手机制。连接池初始化:staticnodejs中很简单,只要初始化相应的函数(建立连接)即。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线