Example #1
0
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) // 根据规则分析响应并返回请求和条目。
}

// 创建分析器。
Example #2
0
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{}