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请求进行配置了。