go 爬虫框架 - gocolly

Posted 星仔学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 爬虫框架 - gocolly相关的知识,希望对你有一定的参考价值。

colly 是 Go 实现的比较有名的一款爬虫框架,而且 Go 在高并发和分布式场景的优势也正是爬虫技术所需要的。它的主要特点是轻量、快速,设计非常优雅,并且分布式的支持也非常简单,易于扩展。

使用

go get -u github.com/gocolly/colly

第一步,导入colly

import "github.com/gocolly/colly"

第二步,创建采集器

c := colly.NewCollector(
    colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/80.0.3987.163 Safari/537.36"),
    colly.MaxDepth(1),
    colly.Debugger(&debug.LogDebugger))
​

第三步,监听回调函数,获取需要的内容

    // 诗词列表
    c.OnHTML("div[class='right'] > div[class='sons'] > div[class='cont']", func(e *colly.HTMLElement) 
        //
        e.ForEach("a", func(i int, item *colly.HTMLElement) 
            // 爬虫协程
            //href := item.ChildAttr("a", "href")
            attr := item.Attr("href")
            text := item.Text
            m := make(map[string]string, 10)
            m["title"] = text
            m["href"] = attr
            // 把连接放进通道内
            chanPoetry <- m
        )
    )

第四步,访问网址

s.Visit(href)

第五步,把爬取的文件写进文件里

for key := range chanPoetryContent 
        // 获取链接
        href := baseUrl + key["href"]
        // 文件名称
        fileName := key["title"]
        dirName := key["text"]
        s := colly.NewCollector(colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"), colly.MaxDepth(1), colly.Debugger(&debug.LogDebugger))
        s.OnHTML("div[class='left'] ", func(e *colly.HTMLElement) 
            name := e.ChildText("div[class='sons'][id='sonsyuanwen'] > div[class='cont'] > h1")
            author := e.ChildText("div[class='sons'][id='sonsyuanwen'] > div[class='cont'] > p[class='source'] > a")
            text := e.ChildText("div[class='sons'][id='sonsyuanwen'] > div[class='cont'] > div[class='contson']")
            content := name + "\\r\\n" + author
            text = strings.Replace(text, "。", "。\\r\\n", 99999)
            text = strings.Replace(text, ";", ";\\r\\n", 99999)
            text = strings.Replace(text, ")", ")\\r\\n", 99999)
            path := mainDir + "/诗词/" + dirName
            if len(fileName) > 0 
                path = path + "/" + fileName
            
            if len(name) == 0 
                return
             else 
                // 创建目录
                makeDir(path)
                file, _ := os.OpenFile(path+"/"+name+".txt", os.O_CREATE|os.O_WRONLY, 0644)
                file.WriteString(content + "\\r\\n")
                file.WriteString(text + "\\r\\n")
                // 关闭资源
                file.Close()
            
​
        )
        s.Visit(href)
    
    waitGroup.Done()

以上是关于go 爬虫框架 - gocolly的主要内容,如果未能解决你的问题,请参考以下文章

Golang 网络爬虫框架gocolly/colly 一

Golang 网络爬虫框架gocolly/colly 二 jQuery selector

go爬虫框架的Colly框架使用

试验一下Golang 网络爬虫框架gocolly/colly

写爬虫还在用 python?快来试试 go 语言的爬虫框架吧

go gocolly模块学习