网络爬虫框架开发笔记

yongfutian · · 788 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

网络爬虫框架开发笔记

1、网络爬虫与框架

1.1. 网络爬虫

首先,我们得明白网络爬虫是个什么玩意,它主要就是模仿终端用户,对网页进行爬取和分析,根据使用者的意愿从爬取下载的网页中提取出相关链接、筛选出可用的内容(词条),并对这些词条作存储、分析、统计等操作。

1.2. 网络爬虫框架

既然我们要做一个网络爬虫的框架,我们就得来了解网络爬虫框架的功用,请看下面流程:

输入(首个网络地址请求)-》网页下载器-》分析器-》条目处理管道-》输出

根据上面的爬取流程分析,我们得出了以下几个核心关键词:
1.2.1. 网页下载器
下载与给定网络地址相对应的网页内容。因为,我们做的是框架,因此对于用户的输入请求,我们会尽可能的预留出的定制接口,让使用者可以根据自己的需求,参照接口自定义自己的“请求”组装方法。注意:用户有可能会偷懒的,所以我们也得创建一个默认的接口实现。

1.2.2 分析器
对下载的网页内容进行分析,并从中帅选出可用的网页内容(即数据条目dataitem)和需要访问的网页链接。同样,为了使得爬虫框架灵活可用,在被用于分析和筛选网页内容的规则和策略方面,我们也得提供灵活的定制接口,因为只有使用者才知道自己真正想要的是什么。请看如下定义:

type ParseResponse func(httpResp *http.Response, respDepth uint32)([]base.Data, []error)

1.2.3. 条目处理管道
接受作为输入的条目,并对其执行一系列的处理步骤。这里对数据的处理【存储、分析、统计等】才是用户的真正需求,因此我们也得给使用者预留出定制接口。请看如下定义:

type ProcessItem func(item base.Item)(result base.Item, err error)

注意:无论是分析器还是条目处理管道,我们都在使用者真正有需要的地方预留出了定制接口,也就是说我们在开发的服务是给第三方使用,而我们又不知道使用方的真正需求的时候,就可像这样给使用者预留出定制接口,这也是golang开发过程中常使用到的一种技术手段

整体流程图如下:

2、详细设计

2.1. 基本数据结构

我们在开发项目的过程中,首先就得明确,整个项目要用到什么类型数据,那些是公用的,那些是私有的。现在我们来定义爬虫框架的数据结构:
2.1.1. 请求Request

type Request struct {
    httpReq *http.Request //http请求的指针值
    depth uint32 //请求的深度
}

2.1.2. 响应Request

type Request struct {
    httpReq *http.Request
    depth uint32
}

2.1.3. 条目Item

type Item map[string] interface{}

以上三种数据类型贯穿我们的整个项目,是构成整个爬虫框架的基石,为了能够用一个类型从整体上标识这三个基本的数据类型,便于管理,我们定义如下接口类型:

/**
 * 接口的命名规范 只有一个函数以er结尾,两个WriterReader,三个及以上用结构体民命方式
 */
 type Data interface {
    Validate() bool
 }

2.1.4. 错误Error

const (
    DownloaderError ErrorType = "Downloader Eoor"
    AnalyzerError ErrorType = "Analyzer Error"
    ItemProcessorError ErrorType = "Item Processor Error"
)

type ErrorType string

type ErrorTypeer interface {
    Type() ErrorType
    Error() string
}

type CrawlerError struct {
    errType ErrorType
    errMsg string
    fullErrMsg string
}
2.2. 接口定义

2.2.1. 网页下载器
2.2.2. 分析器
2.2.3. 条目处理管道
2.2.4. 调度器
2.2.5. 中间件接口概述
2.2.6. 通道管理器
2.2.7. 实体池

2.3. 中间件的实现
2.4. 处理模块的实现
2.5. 调度器的实现
2.6. 使用案例
4、详细设计

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:yongfutian

查看原文:网络爬虫框架开发笔记

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

788 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传