网络爬虫框架开发笔记

栏目: 编程工具 · 发布时间: 5年前

内容简介:首先,我们得明白网络爬虫是个什么玩意,它主要就是模仿终端用户,对网页进行爬取和分析,根据使用者的意愿从爬取下载的网页中提取出相关链接、筛选出可用的内容(词条),并对这些词条作存储、分析、统计等操作。既然我们要做一个网络爬虫的框架,我们就得来了解网络爬虫框架的功用,请看下面流程:根据上面的爬取流程分析,我们得出了以下几个核心关键词:

网络爬虫框架开发笔记

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、详细设计


以上所述就是小编给大家介绍的《网络爬虫框架开发笔记》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Invisible Users

Invisible Users

Jenna Burrell / The MIT Press / 2012-5-4 / USD 36.00

The urban youth frequenting the Internet cafes of Accra, Ghana, who are decidedly not members of their country's elite, use the Internet largely as a way to orchestrate encounters across distance and ......一起来看看 《Invisible Users》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具