spider

package
v0.0.0-...-3a892f2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 28, 2017 License: Apache-2.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	KEYIN                  = util.USE_KEYIN // 若使用Spider.Keyin,则须在规则中设置初始值为USE_KEYIN
	LIMIT                  = math.MaxInt64  // 如希望在规则中自定义控制Limit,则Limit初始值必须为LIMIT
	FORCED_STOP            = "——主动终止Spider——"
	DNS_CACHE_REFRESH_RATE = 5 * time.Minute
)
View Source
const (
	// 闹钟
	A = iota
	// 倒计时
	T
)

Variables

View Source
var Species = &SpiderSpecies{
	list: []*Spider{},
	hash: map[string]*Spider{},
}

全局蜘蛛种类实例

Functions

func AddSpiderModels

func AddSpiderModels(spiderModels ...*SpiderModel)

func PutContext

func PutContext(ctx *Context)

Types

type Bell

type Bell struct {
	Hour int
	Min  int
	Sec  int
}

type Clock

type Clock struct {
	// contains filtered or unexported fields
}

type Context

type Context struct {
	Request  *request.Request // 原始请求
	Response *http.Response   // 响应流,其中URL拷贝自*request.Request

	sync.Mutex
	// contains filtered or unexported fields
}

func GetContext

func GetContext(sp *Spider, req *request.Request, logger ...logs.Logs) *Context

func (*Context) AddQueue

func (self *Context) AddQueue(req *request.Request) *Context

生成并添加请求至队列。 Request.Url与Request.Rule必须设置。 Request.Spider无需手动设置(由系统自动设置)。 Request.EnableCookie在Spider字段中统一设置,规则请求中指定的无效。 以下字段有默认值,可不设置: Request.Method默认为GET方法; Request.DialTimeout默认为常量request.DefaultDialTimeout,小于0时不限制等待响应时长; Request.ConnTimeout默认为常量request.DefaultConnTimeout,小于0时不限制下载超时; Request.TryTimes默认为常量request.DefaultTryTimes,小于0时不限制失败重载次数; Request.RedirectTimes默认不限制重定向次数,小于0时可禁止重定向跳转; Request.RetryPause默认为常量request.DefaultRetryPause; Request.DownloaderID指定下载器ID,0为默认的Surf高并发下载器,功能完备,1为PhantomJS下载器,特点破防力强,速度慢,低并发。 默认自动补填Referer。

func (*Context) Aid

func (self *Context) Aid(aid map[string]interface{}, ruleName ...string) interface{}

调用指定Rule下辅助函数AidFunc()。 用ruleName指定匹配的AidFunc,为空时默认当前规则。

func (*Context) CopyRequest

func (self *Context) CopyRequest() *request.Request

获得一个原始请求的副本。

func (*Context) CopyTemps

func (self *Context) CopyTemps() request.Temp

获得一个请求的缓存数据副本。

func (*Context) CreatItem

func (self *Context) CreatItem(item map[int]interface{}, ruleName ...string) map[string]interface{}

生成文本结果。 用ruleName指定匹配的ItemFields字段,为空时默认当前规则。

func (*Context) FileOutput

func (self *Context) FileOutput(name ...string)

输出文件。 name指定文件名,为空时默认保持原文件名不变。

func (*Context) GetCookie

func (self *Context) GetCookie() string

获取响应的Cookie。

func (*Context) GetDom

func (self *Context) GetDom() *goquery.Document

GetHtmlParser returns goquery object binded to target crawl result.

func (*Context) GetError

func (self *Context) GetError() error

获取下载错误。

func (*Context) GetHeader

func (self *Context) GetHeader() http.Header

获取响应头信息。

func (*Context) GetHost

func (self *Context) GetHost() string

func (*Context) GetItemField

func (self *Context) GetItemField(index int, ruleName ...string) (field string)

由索引下标获取结果字段名,不存在时获取空字符串, 若ruleName为空,默认为当前规则。

func (*Context) GetItemFieldIndex

func (self *Context) GetItemFieldIndex(field string, ruleName ...string) (index int)

由结果字段名获取索引下标,不存在时索引为-1, 若ruleName为空,默认为当前规则。

func (*Context) GetItemFields

func (self *Context) GetItemFields(ruleName ...string) []string

获取结果字段名列表。

func (*Context) GetKeyin

func (self *Context) GetKeyin() string

获取自定义配置。

func (*Context) GetLimit

func (self *Context) GetLimit() int

获取采集上限。

func (*Context) GetMethod

func (self *Context) GetMethod() string

func (*Context) GetName

func (self *Context) GetName() string

获取蜘蛛名。

func (*Context) GetReferer

func (self *Context) GetReferer() string

func (*Context) GetRequest

func (self *Context) GetRequest() *request.Request

获取原始请求。

func (*Context) GetRequestHeader

func (self *Context) GetRequestHeader() http.Header

获取请求头信息。

func (*Context) GetResponse

func (self *Context) GetResponse() *http.Response

获取响应流。

func (*Context) GetRule

func (self *Context) GetRule(ruleName string) (*Rule, bool)

获取指定规则。

func (*Context) GetRuleName

func (self *Context) GetRuleName() string

获取当前规则名。

func (*Context) GetRules

func (self *Context) GetRules() map[string]*Rule

获取规则树。

func (*Context) GetSpider

func (self *Context) GetSpider() *Spider

获取蜘蛛名称。

func (*Context) GetStatusCode

func (self *Context) GetStatusCode() int

获取响应状态码。

func (*Context) GetTemp

func (self *Context) GetTemp(key string, defaultValue interface{}) interface{}

获取请求中临时缓存数据 defaultValue 不能为 interface{}(nil)

func (*Context) GetTemps

func (self *Context) GetTemps() request.Temp

获取请求中全部缓存数据

func (*Context) GetText

func (self *Context) GetText() string

GetBodyStr returns plain string crawled.

func (*Context) GetUrl

func (self *Context) GetUrl() string

从原始请求获取Url,从而保证请求前后的Url完全相等,且中文未被编码。

func (*Context) JsAddQueue

func (self *Context) JsAddQueue(jreq map[string]interface{}) *Context

用于动态规则添加请求。

func (*Context) Log

func (self *Context) Log() logs.Logs

获取日志接口实例。

func (*Context) Logger

func (self *Context) Logger() logs.Logs

func (*Context) Output

func (self *Context) Output(item interface{}, ruleName ...string)

输出文本结果。 item类型为map[int]interface{}时,根据ruleName现有的ItemFields字段进行输出, item类型为map[string]interface{}时,ruleName不存在的ItemFields字段将被自动添加, ruleName为空时默认当前规则。

func (*Context) Parse

func (self *Context) Parse(ruleName ...string) *Context

解析响应流。 用ruleName指定匹配的ParseFunc字段,为空时默认调用Root()。

func (*Context) PullFiles

func (self *Context) PullFiles() (fs []data.FileCell)

func (*Context) PullItems

func (self *Context) PullItems() (ds []data.DataCell)

func (*Context) ResetText

func (self *Context) ResetText(body string) *Context

重置下载的文本内容,

func (*Context) RunTimer

func (self *Context) RunTimer(id string) bool

启动定时器,并获取定时器是否可以继续使用。

func (*Context) SetError

func (self *Context) SetError(err error)

标记下载错误。

func (*Context) SetKeyin

func (self *Context) SetKeyin(keyin string) *Context

设置自定义配置。

func (*Context) SetLimit

func (self *Context) SetLimit(max int) *Context

设置采集上限。

func (*Context) SetPausetime

func (self *Context) SetPausetime(pause int64, runtime ...bool) *Context

自定义暂停区间(随机: Pausetime/2 ~ Pausetime*2),优先级高于外部传参。 当且仅当runtime[0]为true时可覆盖现有值。

func (*Context) SetReferer

func (self *Context) SetReferer(referer string) *Context

func (*Context) SetResponse

func (self *Context) SetResponse(resp *http.Response) *Context

func (*Context) SetTemp

func (self *Context) SetTemp(key string, value interface{}) *Context

在请求中保存临时数据。

func (*Context) SetTimer

func (self *Context) SetTimer(id string, tol time.Duration, bell *Bell) bool

设置定时器, @id为定时器唯一标识, @bell==nil时为倒计时器,此时@tol为睡眠时长, @bell!=nil时为闹铃,此时@tol用于指定醒来时刻(从now起遇到的第tol个bell)。

func (*Context) SetUrl

func (self *Context) SetUrl(url string) *Context

func (*Context) UpsertItemField

func (self *Context) UpsertItemField(field string, ruleName ...string) (index int)

为指定Rule动态追加结果字段名,并获取索引位置, 已存在时获取原来索引位置, 若ruleName为空,默认为当前规则。

type FuncParam

type FuncParam struct {
	Name string
	Data interface{}
}

蜘蛛规则解释器模型

type Function

type Function struct {
	Script string `xml:",chardata"`
	Param  string `xml:"param,attr"`
	// contains filtered or unexported fields
}

蜘蛛规则解释器模型

func (*Function) IsEmpty

func (f *Function) IsEmpty() bool

func (*Function) SetParams

func (f *Function) SetParams(vm *otto.Otto, params ...*FuncParam)

type Rule

type Rule struct {
	ItemFields []string                                           // 结果字段列表(选填,写上可保证字段顺序)
	ParseFunc  func(*Context)                                     // 内容解析函数
	AidFunc    func(*Context, map[string]interface{}) interface{} // 通用辅助函数
}

采集规则节点

type RuleModel

type RuleModel struct {
	Name      string    `xml:"name,attr"`
	ParseFunc *Function `xml:"ParseFunc>Script"`
	AidFunc   *Function `xml:"AidFunc>Script"`
}

蜘蛛规则解释器模型

type RuleTree

type RuleTree struct {
	Root  func(*Context)   // 根节点(执行入口)
	Trunk map[string]*Rule // 节点散列表(执行采集过程)
}

采集规则树

type Spider

type Spider struct {
	// 以下字段由用户定义
	Name            string                                                     // 用户界面显示的名称(应保证唯一性)
	Description     string                                                     // 用户界面显示的描述
	EnableCookie    bool                                                       // 所有请求是否使用cookie记录
	NotDefaultField bool                                                       // 是否禁止输出结果中的默认字段 Url/ParentUrl/DownloadTime
	Namespace       func(self *Spider) string                                  // 命名空间,用于输出文件、路径的命名
	SubNamespace    func(self *Spider, dataCell map[string]interface{}) string // 次级命名,用于输出文件、路径的命名,可依赖具体数据内容
	RuleTree        *RuleTree                                                  // 定义具体的采集规则树
	DataLimit       int                                                        //数据限制:最多采集多少条数据,≤0时代表不限制
	cache.AppConf
	// contains filtered or unexported fields
}

蜘蛛规则

func (*Spider) CanStop

func (self *Spider) CanStop() bool

func (*Spider) Copy

func (self *Spider) Copy() *Spider

返回一个自身复制品

func (*Spider) Defer

func (self *Spider) Defer()

退出任务前收尾工作

func (*Spider) DisableDNSCache

func (self *Spider) DisableDNSCache() *Spider

func (*Spider) DoHistory

func (self *Spider) DoHistory(req *request.Request, ok bool) bool

返回是否作为新的失败请求被添加至队列尾部

func (*Spider) EnableDNSCache

func (self *Spider) EnableDNSCache(d ...time.Duration) *Spider

func (*Spider) GetDNSCacheRefreshRate

func (self *Spider) GetDNSCacheRefreshRate() time.Duration

func (*Spider) GetDescription

func (self *Spider) GetDescription() string

获取蜘蛛描述

func (*Spider) GetEnableCookie

func (self *Spider) GetEnableCookie() bool

控制所有请求是否使用cookie

func (*Spider) GetId

func (self *Spider) GetId() int

获取蜘蛛ID

func (*Spider) GetItemField

func (self *Spider) GetItemField(rule *Rule, index int) (field string)

返回结果字段名的值 不存在时返回空字符串

func (*Spider) GetItemFieldIndex

func (self *Spider) GetItemFieldIndex(rule *Rule, field string) (index int)

返回结果字段名的其索引 不存在时索引为-1

func (*Spider) GetItemFields

func (self *Spider) GetItemFields(rule *Rule) []string

指定规则的获取结果的字段名列表

func (*Spider) GetKeyin

func (self *Spider) GetKeyin() string

获取自定义配置信息

func (*Spider) GetLimit

func (self *Spider) GetLimit() int64

获取采集上限 <0 表示采用限制请求数的方案 >0 表示采用规则中的自定义限制方案

func (*Spider) GetName

func (self *Spider) GetName() string

获取蜘蛛名称

func (*Spider) GetRule

func (self *Spider) GetRule(ruleName string) (*Rule, bool)

安全返回指定规则

func (*Spider) GetRules

func (self *Spider) GetRules() map[string]*Rule

返回规则树

func (*Spider) GetSubName

func (self *Spider) GetSubName() string

获取蜘蛛二级标识名

func (*Spider) IsStopping

func (self *Spider) IsStopping() bool

func (*Spider) MustGetRule

func (self *Spider) MustGetRule(ruleName string) *Rule

返回指定规则

func (*Spider) OutDefaultField

func (self *Spider) OutDefaultField() bool

是否输出默认添加的字段 Url/ParentUrl/DownloadTime

func (Spider) Register

func (self Spider) Register() *Spider

添加自身到蜘蛛菜单

func (*Spider) ReqmatrixInit

func (self *Spider) ReqmatrixInit() *Spider

func (*Spider) RequestFree

func (self *Spider) RequestFree()

func (*Spider) RequestLen

func (self *Spider) RequestLen() int

func (*Spider) RequestPull

func (self *Spider) RequestPull() *request.Request

func (*Spider) RequestPush

func (self *Spider) RequestPush(req *request.Request)

func (*Spider) RequestUse

func (self *Spider) RequestUse()

func (*Spider) RunTimer

func (self *Spider) RunTimer(id string) bool

启动定时器,并返回定时器是否可以继续使用

func (*Spider) SetConf

func (self *Spider) SetConf(conf cache.AppConf) *Spider

func (*Spider) SetId

func (self *Spider) SetId(id int) *Spider

设置蜘蛛ID

func (*Spider) SetKeyin

func (self *Spider) SetKeyin(keyword string) *Spider

设置自定义配置信息

func (*Spider) SetLimit

func (self *Spider) SetLimit(max int64) *Spider

设置采集上限 <0 表示采用限制请求数的方案 >0 表示不限制(可以自己在规则中限制)

func (*Spider) SetPausetime

func (self *Spider) SetPausetime(pause int64, runtime ...bool)

自定义暂停时间 pause[0]~(pause[0]+pause[1]),优先级高于外部传参 当且仅当runtime[0]为true时可覆盖现有值

func (*Spider) SetTimer

func (self *Spider) SetTimer(id string, tol time.Duration, bell *Bell) bool

设置定时器 @id为定时器唯一标识 @bell==nil时为倒计时器,此时@tol为睡眠时长 @bell!=nil时为闹铃,此时@tol用于指定醒来时刻(从now起遇到的第tol个bell)

func (*Spider) Start

func (self *Spider) Start(logger logs.Logs)

开始执行蜘蛛

func (*Spider) Stop

func (self *Spider) Stop()

主动崩溃爬虫运行协程

func (*Spider) TryFlushFailure

func (self *Spider) TryFlushFailure()

func (*Spider) TryFlushSuccess

func (self *Spider) TryFlushSuccess()

func (Spider) Update

func (self Spider) Update() *Spider

func (*Spider) UpsertItemField

func (self *Spider) UpsertItemField(rule *Rule, field string) (index int)

为指定Rule动态追加结果字段名,并返回索引位置 已存在时返回原来索引位置

type SpiderModel

type SpiderModel struct {
	Name                string        `xml:"Name"`
	Description         string        `xml:"Description"`
	Pausetime           int64         `xml:"Pausetime"`
	EnableLimit         bool          `xml:"EnableLimit"`
	EnableKeyin         bool          `xml:"EnableKeyin"`
	EnableCookie        bool          `xml:"EnableCookie"`
	NotDefaultField     bool          `xml:"NotDefaultField"`
	DNSCacheRefreshRate time.Duration `xml:"DNSCacheRefreshRate"`
	Namespace           *Function     `xml:"Namespace>Script"`
	SubNamespace        *Function     `xml:"SubNamespace>Script"`
	Root                *Function     `xml:"Root>Script"`
	Trunk               []RuleModel   `xml:"Rule" json:"Rule"`
}

蜘蛛规则解释器模型

func (*SpiderModel) Apply

func (m *SpiderModel) Apply(sp *Spider) *Spider

type SpiderSpecies

type SpiderSpecies struct {
	// contains filtered or unexported fields
}

蜘蛛种类列表

func (*SpiderSpecies) Add

func (self *SpiderSpecies) Add(sp *Spider) *Spider

向蜘蛛种类清单添加新种类

func (*SpiderSpecies) DelByIndex

func (self *SpiderSpecies) DelByIndex(index int)

func (*SpiderSpecies) DelByName

func (self *SpiderSpecies) DelByName(name string)

func (*SpiderSpecies) Get

func (self *SpiderSpecies) Get() []*Spider

获取全部蜘蛛种类

func (*SpiderSpecies) GetByName

func (self *SpiderSpecies) GetByName(name string) *Spider

type Timer

type Timer struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL