Skip to content

常见问题与功能说明

hu17889 edited this page Nov 30, 2014 · 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())
    }

设置爬虫挂起模式

默认爬虫当队列中没有待抓取的链接的时候,会直接结束爬虫进程,如果需要将爬虫长期保持在内存中运行,有两种方法。

第一种:

利用Spider.SetExitWhenComplete(false),爬虫可以保持在内存中,此种情况适合于通过外界新增待抓取链接(新增待抓取链接的通信模块下一版本实现)。

第二种:

自己在PageProcesser的Process函数中自己实现,在抓取完链接后都会新增待抓取链接,此种情况属于一直抓取同一些链接,如新闻接口的抓取。

设置爬虫并发个数

Spider.SetThreadnum(10)

设置爬取间隔时间

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
Clone this wiki locally