spiders

package
v0.0.0-...-2e4edee Latest Latest
Warning

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

Go to latest
Published: Feb 28, 2022 License: LGPL-3.0 Imports: 20 Imported by: 0

Documentation

Overview

一套蜘蛛抓取的实现构建,需要配合配置文件使用。

配置文件示例见源代码中的spider.cfg文件。

Index

Constants

View Source
const (
	// 索引状态
	INDEX_STATUS_NO      = iota // 没有索引
	INDEX_STATUS_OK             // 已经索引
	INDEX_STATUS_RESTORE        // 已经再保存,spider的数据已经交给后段
	INDEX_STATUS_UP             // 需要更新索引
	INDEX_STATUS_NONEED         // 不需要索引
)
View Source
const (
	// 内部通讯状态
	INTERCOM_OPERATE_STOP   = iota // 站点停止
	INTERCOM_OPERATE_DEL           // 站点删除
	INTERCOM_OPERATE_RUN           // 站点运行
	INTERCOM_OPERATE_CONFIG        // 配置文件更新
)
View Source
const (
	// 挂接的媒体类型,也就是Role中Friends的int,注意这里是int而不是uint8
	MEDIA_TYPE_OUTSIDE = iota // 站外链接(只要是连接到站外的,无论js、css、图片等,都被称为站外连接)
	MEDIA_TYPE_OTHER          // 没有表明的其他
	MEDIA_TYPE_IMG            // 图片文件
	MEDIA_TYPE_FILE           // 普通文件
	MEDIA_TYPE_TEXT           // txt
	MEDIA_TYPE_VIDEO          // video
	MEDIA_TYPE_AUDIO          // audio
)

Variables

View Source
var AcceptLanguage = []string{
	"en-US,en;q=0.5",
}
View Source
var UserAgent = []string{
	"Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0",
	"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0",
	"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)",
	"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36",
	"Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36",
	"Mozilla/5.0 (Linux; Android 6.0; HUAWEI EVA-AL10 Build/HUAWEIEVA-AL10) AppleWebKit/537.36(KHTML,like Gecko) Version/4.0 Mobile Safari/537.36",
	"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0",
	"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
}

Functions

func RegInterfaceForGob

func RegInterfaceForGob()

注册"encoding/gob"所用的类型,如果调用了NewSpider()方法,则不需要再使用这个方法

Types

type MediaData

type MediaData struct {
	roles.Role
	Url         string    // 页面的完整地址
	UpTime      time.Time // Update Time 最近更新时间
	UpInterval  int64     // 更新间隔
	Domain      string    // 域名
	Spider      string    // 爬虫机器身份标记,用以记录获取数据的机器是那一台
	MediaType   int       // 媒体类型
	MediaName   string    // 媒体的文件名
	DataSaved   bool      // 是否保存了数据体
	DataBody    []byte    // 媒体的数据体,根据扩展名可以还原当初文件,按照设置决定是否保存媒体的数据体
	Signature   string    // 内容签名,完整内容的SHA1散列值
	IndexStatus uint8     // 索引状态,默认是不需要索引INDEX_STATUS_NONEED
}

一个挂接的媒体数据信息

type PageData

type PageData struct {
	roles.Role
	Url         string    // 页面的完整地址,带http等协议
	UpTime      time.Time // Update Time 最近更新时间
	UpInterval  int64     // 更新间隔
	Domain      string    // 域名
	Spider      string    // 爬虫机器身份标记,用以记录获取数据的机器是那一台
	KeyWord     []string  // 关键词,来自于页面
	Signature   string    // 内容签名,内容的SHA1散列值,主体,去除HTML标签后的
	HeaderTitle string    // 页面的标题,来自<header><title>
	BodyContent string    // 页面内容信息,来自<body>体
	AllContent  string    // 完整的页面内容
	IndexStatus uint8     // 索引状态
}

一个页面的数据信息

type Site

type Site struct {
	roles.Role
}

站点的数据信息,做一个站点所有页面和媒体角色的父角色

type SiteMachine

type SiteMachine struct {
	rolesplus.RolePlus
	SiteName     string                 // 站点名称
	Spider       string                 // 蜘蛛名称
	Config       *cpool.Section         // 配置信息
	RolesControl *rcontrol.RolesControl // 角色管理器
	Domain       []string               // 域名
	Site         roles.Roleer           // 站点角色
	NowStatus    uint8                  // 状态,对应INTERCOM_OPERATE_*
	StatusSignal chan uint8             // 状态信号量,对应INTERCOM_OPERATE_*
}

站点机器人

func NewSiteMachine

func NewSiteMachine(sitename, spidername string, config *cpool.Section, insidebridge *bridges.Bridge, rolec *rcontrol.RolesControl, logs *ilogs.Logs) (*SiteMachine, error)

由运行中的Spider调用,新建对某个站点的抓取。

参数:站点名, 蜘蛛名, 站点的配置, 内部通讯桥, 角色管理器, 日志

将自己绑定进内部通讯桥中,绑定名为intercom。

func (*SiteMachine) InsideCom

func (sm *SiteMachine) InsideCom(k, i string, data intercom)

内部通讯系统的接收。 因为所有的Site都被注册进同一个内部通讯桥中,所以Site收到信息后首先判断是不是发给自己的。

func (*SiteMachine) Start

func (sm *SiteMachine) Start()

用go start()的方式调用真正的站点抓取启动

type Spider

type Spider struct {
	rolesplus.RolePlus
	Name         string
	Sites        map[string]*SiteMachine // 管理的站点,其中string是从配置文件而来的站点配置节点的名称
	NodeStatus   uint8                   // 结点状态,对应smcs包中的工作状态(NODE_STATUS_*)
	WorkStatus   uint8                   // 运行状态,对应smcs包中的工作状态(WORK_SET_*)
	Config       *cpool.ConfigPool       // 配置文件
	NodeSMCS     *smcs2.NodeSmcs         // 配置蔓延
	RolesControl *rcontrol.RolesControl  // 角色管理器
	// contains filtered or unexported fields
}

抓取蜘蛛

func NewSpider

func NewSpider(name string, rolec *rcontrol.RolesControl, smcsn *smcs2.NodeSmcs, logs *ilogs.Logs) *Spider

新建抓取蜘蛛。

参数说明:rolec为角色控制器,smcsn为smcs包提供的NodeSmcs,logs日志。

这里是作为启动的准备,所以只是处理了角色控制器(也就是存储)和日志。与SMCS进行通讯桥绑定,绑定名为SMCS_Node_Out_Bridge。 新建与站点机器(SiteMachine)沟通的内部通讯桥,绑定名为Spider_Inside_Bridge,发送出去的(给SiteMachine)要求处理的函数名为InsideCom。 而配置文件和其他的诸多状态都为空或关闭,等待运行时被动态修改。

func (*Spider) SmcsNodeOperator

func (s *Spider) SmcsNodeOperator(data smcs2.CenterSend) (err error)

接收SMCS-NODE回传服务器设置信息的方法,k和i这里被忽略不进行处理,这个函数名是在smcs包中指定的

func (*Spider) Start

func (s *Spider) Start()

开启蜘蛛。哪怕没有任何其他动作,也需要手动执行此方法才能让蜘蛛真正运行起来。

Jump to

Keyboard shortcuts

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