-
Notifications
You must be signed in to change notification settings - Fork 470
常见问题与功能说明
胡聪 edited this page Jan 13, 2015
·
12 revisions
在Spider存在Run和Get,GetAll两个方式去执行爬虫,Run方式不会返回爬取结果,Get和GetAll会返回爬取结果,并在main中进一步处理。
Run方式
spider.NewSpider(NewMyPageProcesser(), "TaskName"). // 创建PageProcesser和Spider,设置任务名称
AddUrl("https://github.com/hu17889?tab=repositories", "html"). // 加入初始爬取链接,需要设置爬取结果类型,方便找到相应的解析器
AddPipeline(pipeline.NewPipelineConsole()). // 引入PipelineConsole输入结果到标准输出
SetThreadnum(3). // 设置爬取参数:并发个数
Run() // 开始执行
Get方式
// spider input:
// PageProcesser ;
// task name used in Pipeline for record;
sp := spider.NewSpider(NewMyPageProcesser(), "TaskName")
pageItems := sp.Get("http://baike.baidu.com/view/1628025.htm?fromtitle=http&fromid=243074&type=syn", "html") // url, html is the responce type ("html" or "json")
url := pageItems.GetRequest().GetUrl()
println("-----------------------------------spider.Get---------------------------------")
println("url\t:\t" + url)
for name, value := range pageItems.GetAll() {
println(name + "\t:\t" + value)
}
println("\n--------------------------------spider.GetAll---------------------------------")
urls := []string{
"http://baike.baidu.com/view/1628025.htm?fromtitle=http&fromid=243074&type=syn",
"http://baike.baidu.com/view/383720.htm?fromtitle=html&fromid=97049&type=syn",
}
pageItemsArr := sp.SetThreadnum(2).GetAll(urls, "html")
for _, item := range pageItemsArr {
url = item.GetRequest().GetUrl()
println("url\t:\t" + url)
fmt.Printf("item\t:\t%s\n", item.GetAll())
}
需要主动调用SetScheduler(scheduler.NewQueueScheduler(true)),spider默认使用的是不去重的QueueScheduler
如果爬取的数据不是utf-8编码,则爬虫在Download模块中自动会捕获header中charset字段,进而使用iconv包进行编码转换。
Spider.SetSleepTime(sleeptype string, s uint, e uint)
sleeptype
是时间类型有fixed
,rand
两种方式,fixed
方式下通过s
参数设置间隔时间,rand
方式下s
代表最小间隔时间,e
代表最大间隔时间;
*日志:输出系统错误信息和一些执行信息到日志文件中,通过Spider.OpenFileLog(filepath)
打开,通过Spider.CloseFileLog()
关闭;
*跟踪信息:输出执行过程到标准输出,通过通过Spider.OpenStrace()
打开,通过Spider.CloseStrace()
关闭;
如果想在自己的代码中加入日志,只需要导入日志包import "github.com/hu17889/go_spider/core/common/mlog"
,并执行mlog.LogInst().LogError("error message")或者mlog.LogInst().LogInfo("information")
- 下载模块:HttpDownloader
- 任务队列模块:QueueScheduler
- 输出模块:PipelineConsole,PipelineFile
参考示例