网络爬虫框架开发笔记

栏目: 编程工具 · 发布时间: 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、详细设计


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

查看所有标签

猜你喜欢:

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

数字化生存

数字化生存

(美)Nicholas Negroponte(尼古拉·尼葛洛庞帝) / 胡泳、范海燕 / 电子工业出版社 / 2017-1-1 / 68.00

《数字化生存》描绘了数字科技为我们的生活、工作、教育和娱乐带来的各种冲击和其中值得深思的问题,是跨入数字化新世界的*指南。英文版曾高居《纽约时报》畅销书排行榜。 “信息的DNA”正在迅速取代原子而成为人类生活中的基本交换物。尼葛洛庞帝向我们展示出这一变化的巨大影响。电视机与计算机屏幕的差别变得只是大小不同而已。从前所说的“大众”传媒正演变成个人化的双向交流。信息不再被“推给”消费者,相反,人们或他......一起来看看 《数字化生存》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具