3.2 Request 结构体

Request 结构体代表等待被抓取的粒度精确到一个的Url的结构。

3.2.1 Request定义

type Request struct {
    Spider string // *规则中无需手动指定

    Url  string // *欲访问的URL网页地址,必须设置
    Rule string // *欲使用的爬虫规则,必须设置

    // GET POST POST-M HEAD RESTFUL请求规则
    Method string
    // http header 
    Header http.Header
    // 是否使用cookies,在Spider的EnableCookie设置
    EnableCookie bool
    // POST values POST的实体数据
    PostData url.Values
    // dial tcp: i/o timeout TCP超时时间
    DialTimeout time.Duration
    // WSARecv tcp: i/o timeout WSA超时时间
    ConnTimeout time.Duration
    // the max times of download 最多尝试连接次数
    TryTimes int
    // how long pause when retry 每次尝试间隔时间
    RetryPause time.Duration
    // max redirect times 最大重定向时间
    // when RedirectTimes equal 0, redirect times is ∞
    // when RedirectTimes less than 0, redirect times is 0
    RedirectTimes int
    // the download ProxyHost 代理服务器
    Proxy string

    // 标记临时数据,通过temp[x]==nil判断是否有值存入,所以请存入带类型的值,如[]int(nil)等
    Temp Temp

    // 即将加入哪个优先级的队列当中,默认为0,最小优先级为0
    Priority int

    // 是否允许重复下载
    Reloadable bool

    // 指定下载器ID
    // 0为Surf高并发下载器,各种控制功能齐全
    // 1为PhantomJS下载器,特点破防力强,速度慢,低并发
    DownloaderID int
}

3.2.2 Request提供的接口

主要的接口在pholcus/app/downloader/context/request.go中均有说明,多数都是get\set方法。

另外有func (self *Request) Prepare() error 方法

Prepare是在发送请求前的准备工作,设置一系列默认值:
Request.Url与Request.Rule必须设置
Request.Spider无需手动设置(由系统自动设置)
Request.EnableCookie在Spider字段中统一设置,规则请求中指定的无效
以下字段有默认值,可不设置:
Request.Method默认为GET方法;
Request.DialTimeout默认为常量DefaultDialTimeout,小于0时不限制等待响应时长;
Request.ConnTimeout默认为常量DefaultConnTimeout,小于0时不限制下载超时;
Request.TryTimes默认为常量DefaultTryTimes,小于0时不限制失败重载次数;
Request.RedirectTimes默认不限制重定向次数,小于0时可禁止重定向跳转;
Request.RetryPause默认为常量DefaultRetryPause;
Request.DownloaderID指定下载器ID,0为默认的Surf高并发下载器,功能完备,1为PhantomJS下载器,特点破防力强,速度慢,低并发。

3.2.3 Request相关说明

可以看到,目前Request的粒度很细,相关的配置也有很多,指定这些配置可以在我们Addqueue时实例化一个对应配置的Request,这样就能够精确的对每个Url请求进行配置了。