本文整理匯總了Golang中github.com/henrylee2cn/pholcus/app/downloader/context.Request類的典型用法代碼示例。如果您正苦於以下問題:Golang Request類的具體用法?Golang Request怎麽用?Golang Request使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Request類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: Push
// 添加請求到隊列
func (self *scheduler) Push(req *context.Request) {
// 初始化該蜘蛛的隊列
spiderId, ok := req.GetSpiderId()
if !ok {
return
}
self.RLock()
defer self.RUnlock()
if self.status == status.STOP {
return
}
// 當req不可重複時,有重複則返回
if !req.GetDuplicatable() && self.Deduplicate(req.GetUrl()+req.GetMethod()) {
return
}
// 初始化該蜘蛛下該優先級隊列
priority := req.GetPriority()
if !self.foundPriority(spiderId, priority) {
self.addPriority(spiderId, priority)
}
defer func() {
recover()
}()
// 添加請求到隊列
self.queue[spiderId][priority] = append(self.queue[spiderId][priority], req)
}
示例2: Download
func (self *Surfer) Download(cReq *context.Request) *context.Response {
cResp := context.NewResponse(nil)
var resp *http.Response
var err error
switch cReq.GetDownloaderID() {
case SURF_ID:
resp, err = self.surf.Download(cReq)
case PHANTOM_ID:
resp, err = self.phantom.Download(cReq)
}
if resp != nil {
// 確保Response與Request中的Url字符串相等
resp.Request.URL, _ = url.Parse(cReq.GetUrl())
}
cResp.SetRequest(cReq)
cResp.SetResponse(resp)
cResp.SetError(err)
return cResp
}
示例3: Push
// 添加請求到隊列
func (self *Matrix) Push(req *context.Request) {
sdl.RLock()
defer sdl.RUnlock()
if sdl.status == status.STOP ||
self.maxPage >= 0 ||
// 當req不可重複下載時,已存在成功記錄則返回
!req.IsReloadable() && !UpsertSuccess(req) {
return
}
// 大致限製加入隊列的請求量,並發情況下應該會比maxPage多
atomic.AddInt64(&self.maxPage, 1)
priority := req.GetPriority()
// 初始化該蜘蛛下該優先級隊列
if _, found := self.reqs[priority]; !found {
self.priorities = append(self.priorities, priority)
sort.Ints(self.priorities) // 從小到大排序
self.reqs[priority] = []*context.Request{}
}
// 添加請求到隊列
self.reqs[priority] = append(self.reqs[priority], req)
}
示例4: BulkAddQueue
// 批量url生成請求,並添加至隊列。
func (self *Context) BulkAddQueue(urls []string, req *context.Request) *Context {
for _, url := range urls {
req.SetUrl(url)
self.AddQueue(req)
}
return self
}
示例5: Process
// core processer
func (self *crawler) Process(req *context.Request) {
defer func() {
if err := recover(); err != nil {
// do not affect other
scheduler.Sdl.DelDeduplication(req.GetUrl() + req.GetMethod())
// 統計失敗數
cache.PageFailCount()
// 提示錯誤
logs.Log.Error(" * Fail [process panic]: %v", err)
}
}()
// download page
resp := self.Downloader.Download(req)
// if fail do not need process
if resp.GetError() != nil {
// 刪除該請求的去重樣本
scheduler.Sdl.DelDeduplication(req.GetUrl() + req.GetMethod())
// 統計失敗數
cache.PageFailCount()
// 提示錯誤
logs.Log.Error(" * Fail [download]: %v", resp.GetError())
return
}
// 過程處理,提煉數據
spider.NewContext(self.Spider, resp).Parse(resp.GetRuleName())
// 統計成功頁數
cache.PageSuccCount()
// 提示抓取成功
logs.Log.Informational(" * Success: %v", req.GetUrl())
// 該條請求文本結果存入pipeline
for _, data := range resp.GetItems() {
self.Pipeline.CollectData(
resp.GetRuleName(), //DataCell.RuleName
data, //DataCell.Data
resp.GetUrl(), //DataCell.Url
resp.GetReferer(), //DataCell.ParentUrl
time.Now().Format("2006-01-02 15:04:05"),
)
}
// 該條請求文件結果存入pipeline
for _, img := range resp.GetFiles() {
self.Pipeline.CollectFile(
resp.GetRuleName(),
img["Name"].(string),
img["Body"].(io.ReadCloser),
)
}
}
示例6: SetFailure
func (self *Matrix) SetFailure(req *context.Request) bool {
self.Lock()
defer self.Unlock()
unique := makeUnique(req)
if _, ok := self.failures[unique]; !ok {
// 首次失敗時,在任務隊列末尾重新執行一次
self.failures[unique] = req
logs.Log.Informational(" * + 失敗請求: [%v]\n", req.GetUrl())
return true
}
// 失敗兩次後,加入曆史失敗記錄
UpsertFailure(req)
return false
}
示例7: Process
// core processer
func (self *crawler) Process(req *context.Request) {
defer func() {
if err := recover(); err != nil { // do not affect other
logs.Log.Error(" * Process panic: %v", err)
}
}()
// logs.Log.Debug("**************斷點 1 ***********")
// download page
resp := self.Downloader.Download(req)
// logs.Log.Debug("**************斷點 2 ***********")
// if fail do not need process
if resp.GetError() != nil {
// 取消該請求的去重樣本
scheduler.Sdl.DelDeduplication(req.GetUrl() + req.GetMethod())
logs.Log.Error(" * %v", resp.GetError())
// 統計下載失敗的頁數
cache.PageFailCount()
return
}
// logs.Log.Debug("**************斷點 3 ***********")
// 過程處理,提煉數據
self.Spider.ExecParse(resp)
// logs.Log.Debug("**************斷點 5 ***********")
// 該條請求文本結果存入pipeline
for _, data := range resp.GetItems() {
self.Pipeline.CollectData(
resp.GetRuleName(), //DataCell.RuleName
data, //DataCell.Data
resp.GetUrl(), //DataCell.Url
resp.GetReferer(), //DataCell.ParentUrl
time.Now().Format("2006-01-02 15:04:05"),
)
}
// 該條請求文件結果存入pipeline
for _, img := range resp.GetFiles() {
self.Pipeline.CollectFile(
resp.GetRuleName(),
img["Name"].(string),
img["Body"].(io.ReadCloser),
)
}
// logs.Log.Debug("**************斷點 end ***********")
}
示例8: UpsertFailure
// 更新或加入失敗記錄
// 對比是否已存在,不存在就記錄
func (self *Failure) UpsertFailure(req *context.Request) bool {
self.RWMutex.Lock()
defer self.RWMutex.Unlock()
spName := req.GetSpiderName()
s := req.Serialize()
if failures, ok := self.list[spName]; !ok {
self.list[spName] = make(map[string]bool)
} else if failures[s] {
return false
}
self.list[spName][s] = true
return true
}
示例9: AddQueue
// 生成並添加請求至隊列
// Request.Url與Request.Rule必須設置
// Request.Spider無需手動設置(由係統自動設置)
// Request.EnableCookie在Spider字段中統一設置,規則請求中指定的無效
// 以下字段有默認值,可不設置:
// Request.Method默認為GET方法;
// Request.DialTimeout默認為常量context.DefaultDialTimeout,小於0時不限製等待響應時長;
// Request.ConnTimeout默認為常量context.DefaultConnTimeout,小於0時不限製下載超時;
// Request.TryTimes默認為常量context.DefaultTryTimes;
// Request.RedirectTimes默認不限製重定向次數,小於0時可禁止重定向跳轉;
// Request.RetryPause默認為常量context.DefaultRetryPause.
func (self *Spider) AddQueue(req *context.Request) {
req.
SetSpiderName(self.Name).
SetSpiderId(self.GetId()).
SetEnableCookie(self.EnableCookie).
Prepare()
scheduler.Sdl.Push(req)
}
示例10: AddQueue
// 生成並添加請求至隊列。
// Request.Url與Request.Rule必須設置。
// Request.Spider無需手動設置(由係統自動設置)。
// Request.EnableCookie在Spider字段中統一設置,規則請求中指定的無效。
// 以下字段有默認值,可不設置:
// Request.Method默認為GET方法;
// Request.DialTimeout默認為常量context.DefaultDialTimeout,小於0時不限製等待響應時長;
// Request.ConnTimeout默認為常量context.DefaultConnTimeout,小於0時不限製下載超時;
// Request.TryTimes默認為常量context.DefaultTryTimes,小於0時不限製失敗重載次數;
// Request.RedirectTimes默認不限製重定向次數,小於0時可禁止重定向跳轉;
// Request.RetryPause默認為常量context.DefaultRetryPause;
// Request.DownloaderID指定下載器ID,0為默認的Surf高並發下載器,功能完備,1為PhantomJS下載器,特點破防力強,速度慢,低並發。
// 默認自動補填Referer。
func (self *Context) AddQueue(req *context.Request) *Context {
err := req.
SetSpiderName(self.Spider.GetName()).
SetSpiderId(self.Spider.GetId()).
SetEnableCookie(self.Spider.GetEnableCookie()).
Prepare()
if err != nil {
logs.Log.Error("%v", err)
return self
}
if req.GetReferer() == "" && self.Response != nil {
req.SetReferer(self.Response.GetUrl())
}
scheduler.Sdl.Push(req)
return self
}
示例11: Download
func (self *Surfer) Download(cReq *context.Request) *context.Response {
cResp := context.NewResponse(nil)
var resp *http.Response
var err error
switch cReq.GetDownloaderID() {
case SURF_ID:
resp, err = self.surf.Download(cReq)
case PHANTOM_ID:
resp, err = self.phantom.Download(cReq)
}
cResp.Prepare(resp, cReq)
cResp.SetError(err)
return cResp
}
示例12: Download
func (self *Surfer) Download(cReq *context.Request) *context.Response {
cResp := context.NewResponse(nil)
var resp *http.Response
var err error
if cReq.GetUsePhantomJS() {
resp, err = self.phantom.Download(cReq)
} else {
resp, err = self.surf.Download(cReq)
}
cResp.SetRequest(cReq)
cResp.SetResponse(resp)
cResp.SetError(err)
return cResp
}
示例13: Push
// 添加請求到隊列
func (self *scheduler) Push(req *context.Request) {
pushMutex.Lock()
defer func() {
pushMutex.Unlock()
}()
if self.status == status.STOP {
return
}
// 有重複則返回
if self.Compare(req.GetUrl() + req.GetMethod()) {
return
}
// 留作未來分發請求用
// if pholcus.Self.GetRunMode() == config.SERVER || req.CanOutsource() {
// return
// }
self.SrcManage.Push(req)
}
示例14: Push
func (self *SrcManage) Push(req *context.Request) {
spiderId, ok := req.GetSpiderId()
if !ok {
return
}
// 初始化該蜘蛛的隊列
if _, ok := self.queue[spiderId]; !ok {
self.mutex[spiderId] = new(sync.Mutex)
self.queue[spiderId] = make(map[int][]*context.Request)
}
priority := req.GetPriority()
// 登記該蜘蛛下該優先級隊列
if _, ok := self.queue[spiderId][priority]; !ok {
self.uIndex(spiderId, priority)
}
// 添加請求到隊列
self.queue[spiderId][priority] = append(self.queue[spiderId][priority], req)
}
示例15: Download
func (self *Surfer) Download(cReq *context.Request) *context.Response {
cResp := context.NewResponse(nil)
resp, err := self.download.Download(cReq.GetMethod(), cReq.GetUrl(), cReq.GetReferer(), cReq.GetPostData(), cReq.GetHeader(), cReq.GetCookies())
cResp.SetRequest(cReq)
cResp.SetResponse(resp)
cResp.SetError(err)
return cResp
}