3.2 Request 结构体

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

3.2.1 Request定义

  1. type Request struct {
  2. Spider string // *规则中无需手动指定
  3. Url string // *欲访问的URL网页地址,必须设置
  4. Rule string // *欲使用的爬虫规则,必须设置
  5. // GET POST POST-M HEAD RESTFUL请求规则
  6. Method string
  7. // http header
  8. Header http.Header
  9. // 是否使用cookies,在Spider的EnableCookie设置
  10. EnableCookie bool
  11. // POST values POST的实体数据
  12. PostData url.Values
  13. // dial tcp: i/o timeout TCP超时时间
  14. DialTimeout time.Duration
  15. // WSARecv tcp: i/o timeout WSA超时时间
  16. ConnTimeout time.Duration
  17. // the max times of download 最多尝试连接次数
  18. TryTimes int
  19. // how long pause when retry 每次尝试间隔时间
  20. RetryPause time.Duration
  21. // max redirect times 最大重定向时间
  22. // when RedirectTimes equal 0, redirect times is ∞
  23. // when RedirectTimes less than 0, redirect times is 0
  24. RedirectTimes int
  25. // the download ProxyHost 代理服务器
  26. Proxy string
  27. // 标记临时数据,通过temp[x]==nil判断是否有值存入,所以请存入带类型的值,如[]int(nil)等
  28. Temp Temp
  29. // 即将加入哪个优先级的队列当中,默认为0,最小优先级为0
  30. Priority int
  31. // 是否允许重复下载
  32. Reloadable bool
  33. // 指定下载器ID
  34. // 0为Surf高并发下载器,各种控制功能齐全
  35. // 1为PhantomJS下载器,特点破防力强,速度慢,低并发
  36. DownloaderID int
  37. }

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