Golangネットワーク爬虫類フレームワークgocolly/colly(一)

12031 ワード

gocollyはgoで実現されたネットワーク爬虫フレームワークで、現在githubには3400+星があり、go版爬虫プログラムのトップにランクされている.gocollyは急速に優雅で、単核上で毎秒1 K以上の要求を開始することができる.任意のタイプの爬虫類を実現できるコールバック関数の形式でインタフェースのセットを提供した.goqueryライブラリに依存すると、jqueryのようにweb要素を選択できます.
gocollyの公式サイトはhttp://go-colly.org/を選択します.インストールcolly:
go get -u github.com/gocolly/colly/...

コードにパッケージをインポートするには、次の手順に従います.
import "github.com/gocolly/colly"

collyの主体はCollectorオブジェクトであり,ネットワーク通信を管理し,ジョブ実行時に付加的なリターン関数を実行する.collyを使用するには、Collectorを初期化する必要があります.
c := colly.NewCollector()

collyには、ジョブの収集や情報の取得を制御するために、さまざまなタイプのリターン関数を追加できます.フォールバック関数を追加:
c.OnRequest(func(r *colly.Request) {
    fmt.Println("Visiting", r.URL)
})
c.OnError(func(_ *colly.Response, err error) {
    log.Println("Something went wrong:", err)
})
c.OnResponse(func(r *colly.Response) {
    fmt.Println("Visited", r.URL)
})
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
    e.Request.Visit(e.Attr("href"))
})
c.OnHTML("tr td:nth-of-type(1)", func(e *colly.HTMLElement) {
    fmt.Println("First column of a table row:", e.Text)
})
c.OnScraped(func(r *colly.Response) {
    fmt.Println("Finished", r.URL) 
})

ロールバック関数の呼び出し順序は次のとおりです.
  • OnRequestが要求を開始する前に呼び出される
  • OnErrorリクエスト中にエラーが発生した場合に呼び出される
  • OnResponse返信を受信すると呼び出される
  • OnHTMLはOnResponseの後に呼び出され、受信したコンテンツがHTML
  • であれば
  • OnScrapedは、OnHTMLの後に呼び出された
  • 公式に提供されるBasicサンプルコード:
    package main
    
    import (
        "fmt"
        "github.com/gocolly/colly"
    )
    func main() {
        // Instantiate default collector
        c := colly.NewCollector()
        // Visit only domains: hackerspaces.org, wiki.hackerspaces.org
        c.AllowedDomains = []string{"hackerspaces.org", "wiki.hackerspaces.org"}
        // On every a element which has href attribute call callback
        c.OnHTML("a[href]", func(e *colly.HTMLElement) {
            link := e.Attr("href")
            // Print link
            fmt.Printf("Link found: %q -> %s
    "
    , e.Text, link) // Visit link found on page // Only those links are visited which are in AllowedDomains c.Visit(e.Request.AbsoluteURL(link)) }) // Before making a request print "Visiting ..." c.OnRequest(func(r *colly.Request) { fmt.Println("Visiting", r.URL.String()) }) // Start scraping on https://hackerspaces.org c.Visit("https://hackerspaces.org/") }

    このインスタンス・プログラムはhackerspaces.orgドメイン内のリンクのみにアクセスし、OnHTMLは関数のセレクタをa[href]に戻し、ページ内のhref属性を持つaタイプの要素を選択し、リンクを見つけてから引き続きキャプチャする.実行結果の一部は次のとおりです.
    PS E:\mygo\src\github.com\gocolly\colly\_examples\basic> .\basic.exe
    
    Visiting https://hackerspaces.org/
    
    Link found: "navigation" -> #column-one
    
    Link found: "search" -> #searchInput
    
    Link found: "" -> /File:Cbase07.jpg
    
    Visiting https://hackerspaces.org/File:Cbase07.jpg
    
    Link found: "navigation" -> #column-one
    
    Link found: "search" -> #searchInput
    
    Link found: "File" -> #file
    
    Link found: "File history" -> #filehistory
    
    Link found: "File usage" -> #filelinks
    
    Link found: "" -> /images/e/ec/Cbase07.jpg
    
    Visiting https://hackerspaces.org/images/e/ec/Cbase07.jpg
    
    Link found: "800 × 600 pixels" -> /images/thumb/e/ec/Cbase07.jpg/800px-Cbase07.jpg
    
    Visiting https://hackerspaces.org/images/thumb/e/ec/Cbase07.jpg/800px-Cbase07.jpg
    

    原文リンク:Golangネットワーク爬虫類フレームワークgocolly/colly一