package analyzer import ( "errors" "fmt" "logging" "net/url" base "webcrawler/base" mdw "webcrawler/middleware" ) // 日志记录器。 var logger logging.Logger = base.NewLogger() // ID生成器。 var analyzerIdGenerator mdw.IdGenerator = mdw.NewIdGenerator() // 生成并返回ID。 func genAnalyzerId() uint32 { return analyzerIdGenerator.GetUint32() } // 分析器的接口类型。 type Analyzer interface { Id() uint32 // 获得ID。 Analyze( respParsers []ParseResponse, resp base.Response) ([]base.Data, []error) // 根据规则分析响应并返回请求和条目。 } // 创建分析器。
package downloader import ( "logging" "net/http" base "webcrawler/base" mdw "webcrawler/middleware" ) // 日志记录器。 var logger logging.Logger = base.NewLogger() // ID生成器。 var downloaderIdGenerator mdw.IdGenerator = mdw.NewIdGenerator() // 生成并返回ID。 func genDownloaderId() uint32 { return downloaderIdGenerator.GetUint32() } // 网页下载器的接口类型。 type PageDownloader interface { Id() uint32 // 获得ID。 Download(req base.Request) (*base.Response, error) // 根据请求下载网页并返回响应。 } // 创建网页下载器。 func NewPageDownloader(client *http.Client) PageDownloader { id := genDownloaderId() if client == nil { client = &http.Client{}