Skip to content

常见问题与功能说明

胡聪 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())
    }

队列中的url去重

需要主动调用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

设置cookies和header

参考示例