在用 scrapy 的时候,它提供了非常好用的 shell 帮助我们非常方便地实现 debug。但非常可惜 colly 中并没有类似功能,这里的 debugger 主要是指运行时的信息收集。
debugger 是一个接口,我们只要实现它其中的两个方法,就可完成运行时信息的收集。
type Debugger interface { // Init initializes the backend Init() error // Event receives a new collector event. Event(e *Event) }
源码中有个典型的案例,LogDebugger。我们只需提供相应的 io.Writer 类型变量,具体如何使用呢?
一个案例,如下:
package mainimport ( "log" "os" "github.com/gocolly/colly" "github.com/gocolly/colly/debug")func main() { writer, err := os.OpenFile("collector.log", os.O_RDWR|os.O_CREATE, 0666) if err != nil { panic(err) } c := colly.NewCollector(colly.Debugger(&debug.LogDebugger{Output: writer}), colly.MaxDepth(2)) c.OnHTML("a[href]", func(e *colly.HTMLElement) { if err := e.Request.Visit(e.Attr("href")); err != nil { log.Printf("visit err: %v", err) } }) if err := c.Visit("http://go-colly.org/"); err != nil { panic(err) } }
运行完成,打开 collector.log 即可查看输出内容