Documentation ¶
Index ¶
- Constants
- Variables
- func PutContext(ctx *Context)
- type Bell
- type Clock
- type Context
- func (self *Context) AddQueue(req *request.Request) *Context
- func (self *Context) Aid(aid map[string]interface{}, ruleName ...string) interface{}
- func (self *Context) CopyRequest() *request.Request
- func (self *Context) CopyTemps() request.Temp
- func (self *Context) CreatItem(item map[int]interface{}, ruleName ...string) map[string]interface{}
- func (self *Context) FileOutput(nameOrExt ...string)
- func (self *Context) GetCookie() string
- func (self *Context) GetDom() *goquery.Document
- func (self *Context) GetError() error
- func (self *Context) GetHeader() http.Header
- func (self *Context) GetHost() string
- func (self *Context) GetItemField(index int, ruleName ...string) (field string)
- func (self *Context) GetItemFieldIndex(field string, ruleName ...string) (index int)
- func (self *Context) GetItemFields(ruleName ...string) []string
- func (self *Context) GetKeyin() string
- func (self *Context) GetLimit() int
- func (self *Context) GetMethod() string
- func (self *Context) GetName() string
- func (self *Context) GetReferer() string
- func (self *Context) GetRequest() *request.Request
- func (self *Context) GetRequestHeader() http.Header
- func (self *Context) GetResponse() *http.Response
- func (self *Context) GetRule(ruleName string) (*Rule, bool)
- func (self *Context) GetRuleName() string
- func (self *Context) GetRules() map[string]*Rule
- func (self *Context) GetSpider() *Spider
- func (self *Context) GetStatusCode() int
- func (self *Context) GetTemp(key string, defaultValue interface{}) interface{}
- func (self *Context) GetTemps() request.Temp
- func (self *Context) GetText() string
- func (self *Context) GetUrl() string
- func (self *Context) JsAddQueue(jreq map[string]interface{}) *Context
- func (*Context) Log() logs.Logs
- func (self *Context) Output(item interface{}, ruleName ...string)
- func (self *Context) Parse(ruleName ...string) *Context
- func (self *Context) PullFiles() (fs []data.FileCell)
- func (self *Context) PullItems() (ds []data.DataCell)
- func (self *Context) ResetText(body string) *Context
- func (self *Context) RunTimer(id string) bool
- func (self *Context) SetError(err error)
- func (self *Context) SetKeyin(keyin string) *Context
- func (self *Context) SetLimit(max int) *Context
- func (self *Context) SetPausetime(pause int64, runtime ...bool) *Context
- func (self *Context) SetReferer(referer string) *Context
- func (self *Context) SetResponse(resp *http.Response) *Context
- func (self *Context) SetTemp(key string, value interface{}) *Context
- func (self *Context) SetTimer(id string, tol time.Duration, bell *Bell) bool
- func (self *Context) SetUrl(url string) *Context
- func (self *Context) UpsertItemField(field string, ruleName ...string) (index int)
- type Rule
- type RuleModle
- type RuleTree
- type Spider
- func (self *Spider) CanStop() bool
- func (self *Spider) Copy() *Spider
- func (self *Spider) Defer()
- func (self *Spider) DoHistory(req *request.Request, ok bool) bool
- func (self *Spider) GetDescription() string
- func (self *Spider) GetEnableCookie() bool
- func (self *Spider) GetId() int
- func (self *Spider) GetItemField(rule *Rule, index int) (field string)
- func (self *Spider) GetItemFieldIndex(rule *Rule, field string) (index int)
- func (self *Spider) GetItemFields(rule *Rule) []string
- func (self *Spider) GetKeyin() string
- func (self *Spider) GetLimit() int64
- func (self *Spider) GetName() string
- func (self *Spider) GetRule(ruleName string) (*Rule, bool)
- func (self *Spider) GetRules() map[string]*Rule
- func (self *Spider) GetSubName() string
- func (self *Spider) IsStopping() bool
- func (self *Spider) MustGetRule(ruleName string) *Rule
- func (self *Spider) OutDefaultField() bool
- func (self Spider) Register() *Spider
- func (self *Spider) ReqmatrixInit() *Spider
- func (self *Spider) RequestFree()
- func (self *Spider) RequestLen() int
- func (self *Spider) RequestPull() *request.Request
- func (self *Spider) RequestPush(req *request.Request)
- func (self *Spider) RequestUse()
- func (self *Spider) RunTimer(id string) bool
- func (self *Spider) SetId(id int)
- func (self *Spider) SetKeyin(keyword string)
- func (self *Spider) SetLimit(max int64)
- func (self *Spider) SetPausetime(pause int64, runtime ...bool)
- func (self *Spider) SetTimer(id string, tol time.Duration, bell *Bell) bool
- func (self *Spider) Start()
- func (self *Spider) Stop()
- func (self *Spider) TryFlushFailure()
- func (self *Spider) TryFlushSuccess()
- func (self *Spider) UpsertItemField(rule *Rule, field string) (index int)
- type SpiderModle
- type SpiderSpecies
- type Timer
Constants ¶
const ( KEYIN = util.USE_KEYIN // 若使用Spider.Keyin,则须在规则中设置初始值为USE_KEYIN LIMIT = math.MaxInt64 // 如希望在规则中自定义控制Limit,则Limit初始值必须为LIMIT FORCED_STOP = "——主动终止Spider——" )
const ( // 闹钟 A = iota // 倒计时 T )
Variables ¶
var Species = &SpiderSpecies{ list: []*Spider{}, hash: map[string]*Spider{}, }
全局蜘蛛种类实例
Functions ¶
func PutContext ¶
func PutContext(ctx *Context)
Types ¶
type Context ¶
type Context struct { Request *request.Request // 原始请求 Response *http.Response // 响应流,其中URL拷贝自*request.Request sync.Mutex // contains filtered or unexported fields }
func (*Context) AddQueue ¶
生成并添加请求至队列。 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) FileOutput ¶
输出文件。 nameOrExt指定文件名或仅扩展名,为空时默认保持原文件名(包括扩展名)不变。
func (*Context) GetItemField ¶
由索引下标获取结果字段名,不存在时获取空字符串, 若ruleName为空,默认为当前规则。
func (*Context) GetItemFieldIndex ¶
由结果字段名获取索引下标,不存在时索引为-1, 若ruleName为空,默认为当前规则。
func (*Context) GetItemFields ¶
获取结果字段名列表。
func (*Context) GetReferer ¶
func (*Context) JsAddQueue ¶
用于动态规则添加请求。
func (*Context) Output ¶
输出文本结果。 item类型为map[int]interface{}时,根据ruleName现有的ItemFields字段进行输出, item类型为map[string]interface{}时,ruleName不存在的ItemFields字段将被自动添加, ruleName为空时默认当前规则。
func (*Context) SetPausetime ¶
自定义暂停区间(随机: Pausetime/2 ~ Pausetime*2),优先级高于外部传参。 当且仅当runtime[0]为true时可覆盖现有值。
func (*Context) SetReferer ¶
type Rule ¶
type Rule struct { ItemFields []string // 结果字段列表(选填,写上可保证字段顺序) ParseFunc func(*Context) // 内容解析函数 AidFunc func(*Context, map[string]interface{}) interface{} // 通用辅助函数 }
采集规则节点
type RuleModle ¶
type RuleModle struct { Name string `xml:"name,attr"` ParseFunc string `xml:"ParseFunc>Script"` AidFunc string `xml:"AidFunc>Script"` }
蜘蛛规则解释器模型
type Spider ¶
type Spider struct { // 以下字段由用户定义 Name string // 用户界面显示的名称(应保证唯一性) Description string // 用户界面显示的描述 Pausetime int64 // 随机暂停区间(50%~200%),若规则中直接定义,则不被界面传参覆盖 Limit int64 // 默认限制请求数,0为不限;若规则中定义为LIMIT,则采用规则的自定义限制方案 Keyin string // 自定义输入的配置信息,使用前须在规则中设置初始值为KEYIN EnableCookie bool // 所有请求是否使用cookie记录 NotDefaultField bool // 是否禁止输出结果中的默认字段 Url/ParentUrl/DownloadTime Namespace func(self *Spider) string // 命名空间,用于输出文件、路径的命名 SubNamespace func(self *Spider, dataCell map[string]interface{}) string // 次级命名,用于输出文件、路径的命名,可依赖具体数据内容 RuleTree *RuleTree // 定义具体的采集规则树 // contains filtered or unexported fields }
蜘蛛规则
func (*Spider) GetItemField ¶
返回结果字段名的值 不存在时返回空字符串
func (*Spider) GetItemFieldIndex ¶
返回结果字段名的其索引 不存在时索引为-1
func (*Spider) GetItemFields ¶
指定规则的获取结果的字段名列表
func (*Spider) IsStopping ¶
func (*Spider) OutDefaultField ¶
是否输出默认添加的字段 Url/ParentUrl/DownloadTime
func (*Spider) ReqmatrixInit ¶
func (*Spider) RequestFree ¶
func (self *Spider) RequestFree()
func (*Spider) RequestLen ¶
func (*Spider) RequestPull ¶
func (*Spider) RequestPush ¶
func (*Spider) RequestUse ¶
func (self *Spider) RequestUse()
func (*Spider) SetPausetime ¶
自定义暂停时间 pause[0]~(pause[0]+pause[1]),优先级高于外部传参 当且仅当runtime[0]为true时可覆盖现有值
func (*Spider) SetTimer ¶
设置定时器 @id为定时器唯一标识 @bell==nil时为倒计时器,此时@tol为睡眠时长 @bell!=nil时为闹铃,此时@tol用于指定醒来时刻(从now起遇到的第tol个bell)
func (*Spider) TryFlushFailure ¶
func (self *Spider) TryFlushFailure()
func (*Spider) TryFlushSuccess ¶
func (self *Spider) TryFlushSuccess()
type SpiderModle ¶
type SpiderModle 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"` Namespace string `xml:"Namespace>Script"` SubNamespace string `xml:"SubNamespace>Script"` Root string `xml:"Root>Script"` Trunk []RuleModle `xml:"Rule"` }
蜘蛛规则解释器模型
type SpiderSpecies ¶
type SpiderSpecies struct {
// contains filtered or unexported fields
}
蜘蛛种类列表
func (*SpiderSpecies) GetByName ¶
func (self *SpiderSpecies) GetByName(name string) *Spider