本文整理匯總了Golang中github.com/henrylee2cn/pholcus/app/downloader/request.Request.GetUrl方法的典型用法代碼示例。如果您正苦於以下問題:Golang Request.GetUrl方法的具體用法?Golang Request.GetUrl怎麽用?Golang Request.GetUrl使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/henrylee2cn/pholcus/app/downloader/request.Request
的用法示例。
在下文中一共展示了Request.GetUrl方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: DoHistory
// 返回是否作為新的失敗請求被添加至隊列尾部
func (self *Matrix) DoHistory(req *request.Request, ok bool) bool {
hash := makeUnique(req)
if !req.IsReloadable() {
self.tempHistoryLock.Lock()
delete(self.tempHistory, hash)
self.tempHistoryLock.Unlock()
if ok {
self.history.UpsertSuccess(hash)
return false
}
}
if ok {
return false
}
self.failureLock.Lock()
defer self.failureLock.Unlock()
if _, ok := self.failures[hash]; !ok {
// 首次失敗時,在任務隊列末尾重新執行一次
self.failures[hash] = req
logs.Log.Informational(" * + 失敗請求: [%v]\n", req.GetUrl())
return true
}
// 失敗兩次後,加入曆史失敗記錄
self.history.UpsertFailure(req)
return false
}
示例2: Process
// core processer
func (self *crawler) Process(req *request.Request) {
var (
ctx = self.Downloader.Download(self.Spider, req) // download page
downUrl = req.GetUrl()
)
if err := ctx.GetError(); err != nil {
// 返回是否作為新的失敗請求被添加至隊列尾部
if self.Spider.DoHistory(req, false) {
// 統計失敗數
cache.PageFailCount()
}
// 提示錯誤
logs.Log.Error(" * Fail [download][%v]: %v\n", downUrl, err)
return
}
defer func() {
if err := recover(); err != nil {
if activeStop, _ := err.(string); activeStop == spider.ACTIVE_STOP {
return
}
// 返回是否作為新的失敗請求被添加至隊列尾部
if self.Spider.DoHistory(req, false) {
// 統計失敗數
cache.PageFailCount()
}
// 提示錯誤
logs.Log.Error(" * Panic [process][%v]: %v\n", downUrl, err)
}
}()
// 過程處理,提煉數據
ctx.Parse(req.GetRuleName())
// 處理成功請求記錄
self.Spider.DoHistory(req, true)
// 統計成功頁數
cache.PageSuccCount()
// 提示抓取成功
logs.Log.Informational(" * Success: %v\n", downUrl)
// 該條請求文本結果存入pipeline
for _, item := range ctx.PullItems() {
self.Pipeline.CollectData(item)
}
// 該條請求文件結果存入pipeline
for _, f := range ctx.PullFiles() {
self.Pipeline.CollectFile(f)
}
// 釋放ctx準備複用
spider.PutContext(ctx)
}
示例3: Process
// core processer
func (self *crawler) Process(req *request.Request) {
var (
downUrl = req.GetUrl()
sp = self.Spider
)
defer func() {
if p := recover(); p != nil {
if sp.IsStopping() {
// println("Process$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
return
}
// 返回是否作為新的失敗請求被添加至隊列尾部
if sp.DoHistory(req, false) {
// 統計失敗數
cache.PageFailCount()
}
// 提示錯誤
stack := make([]byte, 4<<10) //4KB
length := runtime.Stack(stack, true)
start := bytes.Index(stack, []byte("/src/runtime/panic.go"))
stack = stack[start:length]
start = bytes.Index(stack, []byte("\n")) + 1
stack = stack[start:]
if end := bytes.Index(stack, []byte("\ngoroutine ")); end != -1 {
stack = stack[:end]
}
stack = bytes.Replace(stack, []byte("\n"), []byte("\r\n"), -1)
logs.Log.Error(" * Panic [process][%s]: %s\r\n[TRACE]\r\n%s", downUrl, p, stack)
}
}()
var ctx = self.Downloader.Download(sp, req) // download page
if err := ctx.GetError(); err != nil {
// 返回是否作為新的失敗請求被添加至隊列尾部
if sp.DoHistory(req, false) {
// 統計失敗數
cache.PageFailCount()
}
// 提示錯誤
logs.Log.Error(" * Fail [download][%v]: %v\n", downUrl, err)
return
}
// 過程處理,提煉數據
ctx.Parse(req.GetRuleName())
// 該條請求文件結果存入pipeline
for _, f := range ctx.PullFiles() {
if self.Pipeline.CollectFile(f) != nil {
break
}
}
// 該條請求文本結果存入pipeline
for _, item := range ctx.PullItems() {
if self.Pipeline.CollectData(item) != nil {
break
}
}
// 處理成功請求記錄
sp.DoHistory(req, true)
// 統計成功頁數
cache.PageSuccCount()
// 提示抓取成功
logs.Log.Informational(" * Success: %v\n", downUrl)
// 釋放ctx準備複用
spider.PutContext(ctx)
}
示例4: makeUnique
func makeUnique(req *request.Request) string {
return util.MakeUnique(req.GetUrl() + req.GetMethod())
}