Skip to content

rayderay/node-crawler

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Node爬虫流程

爬虫的概念就是一种按照一定的规则,自动的抓取网站信息的程序或者脚本

1. 抓取

最重要的步骤,需要把所需要的页面抓取出来,同时需要兼顾时间效率,能够并发的同时爬取多个页面。 需要分析页面结构,按需求爬取所需要的数据。

2. 分析

对网页进行文本分析。通常分析和存储会交替进行。

3. 存储

将页面内容会先使用一定的策略进行存储。这次的Demo使用的是mongod。

4. 展示

根据需求将爬取的结果数据进行展示。

结合Demo的流程
step 1 获取博文文章入口URL

目标是爬取博客园博客里面博主信息。首先需要爬取每一页的博文列表,然后再依次请求博文列表数据,获取博主的用户ID之后再请求数据获取详情。

eventproxy eventproxy(https://github.com/JacksonTian/eventproxy ) 非常轻量的工具,但是能够带来一种事件式编程的思维变化。

用 js 写过异步的同学应该都知道,如果你要并发异步获取两三个地址的数据,并且要在获取到数据之后,对这些数据一起进行利用的话,常规的写法是自己维护一个计数器。

先定义一个 var count =0,然后每次抓取成功以后,就 count++。如果你是要抓取三个源的数据,由于你根本不知道这些异步操作到底谁先完成,那么每次当抓取成功的时候,就判断一下count ===3。当值为真时,使用另一个函数继续完成操作。

而 eventproxy就起到了这个计数器的作用,它来帮你管理到底这些异步操作是否完成,完成之后,它会自动调用你提供的处理函数,并将抓取到的数据当参数传过来。

step 2 爬取具体的页面,使用async控制异步并发数量。

async async(https://github.com/caolan/async#queueworker-concurrency),async是一个流程控制工具包,提供了直接而强大的异步功能mapLimit(arr, limit, iterator, callback)。

这次我们要介绍的是 async 的 mapLimit(arr, limit, iterator, callback) 接口。 这个方法也是就说,传入请求接口的集合参数,以及并发数量,比如一次请求5个接口,只有在这5个接口全部异步请求完成之后,才可以继续进行接下来的请求。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published