爬虫系统设计

文章讲述了如何设计高效的网页抓取服务,包括避免死循环、使用BFS和优先队列抓取策略、考虑权重因素、采用NoSQL数据库存储、多线程抓取以及扩展性测试的方法。还讨论了SQL和NoSQL在存储选择上的优缺点。
摘要由CSDN通过智能技术生成

1 场景

服务 抓取一系列链接

用户 输入搜索词后,可以看到相关的搜索结果列表,列表每一项都包含由网页爬虫生成的页面标题及摘要

 

目标:

网页爬虫不应该陷入死循环

抓取 10 亿个链接

 

流程图:

客户端向服务器发送一个请求

服务器 发送请求到 Query API 服务器

查询 API把查询结果返回给服务器

服务器把结果返回给客户端

 

2 服务

爬虫服务,查询服务,文档服务

 

使用倒排索引服务来查找匹配查询的文档

使用文档服务返回文章标题与摘要

爬虫服务按照流程,循环处理每一个页面链接

 

 

设计类,包括成员变量和成员函数

PagesDataStore 是爬虫服务中的一个抽象类,它使用 NoSQL 数据库进行存储。

Page 是爬虫服务的一个抽象类,它封装了网页对象,由页面链接、页面内容、子链接和页面签名构成。

 

 

设计函数

怎么抓取?

采用BFS的方法,维护一个队列,抓取到一个网页以后,分析网页的链接,扔到队列里。

 

优化:

采用优先队列调度,区别于单纯的BFS,对于每个网页设定一定的抓取权重,优先抓取权重较高的网页。对于权重的设定,考虑的因素有:1. 是否属于一个比较热门的网站 2. 链接长度 3. link到该网页的网页的权重 4. 该网页被指向的次数 等等。

 

进一步考虑,对于热门的网站,不能无限制的抓取,所以需要进行二级调度。首先调度抓取哪个网站,然后选中了要抓取的网站之后,调度在该网站中抓取哪些网页。这样做的好处是,非常礼貌的对单个网站的抓取有一定的限制,也给其他网站的网页抓取一些机会。

 

提高抓取效率?

多线程抓取

 

3 存储

我们应当在 选择 SQL 还是 NoSQL 的问题上,讨论有关使用场景以及利弊 。

 

4 扩展

1) 基准测试、负载测试。

2) 分析、描述性能瓶颈。

3) 在解决瓶颈问题的同时,评估替代方案、权衡利弊。

4) 重复以上步骤。

 

 

 

 

 

 

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值