Golangネットワーク爬虫類フレームワークgocolly/colly(一)
12031 ワード
gocollyはgoで実現されたネットワーク爬虫フレームワークで、現在githubには3400+星があり、go版爬虫プログラムのトップにランクされている.gocollyは急速に優雅で、単核上で毎秒1 K以上の要求を開始することができる.任意のタイプの爬虫類を実現できるコールバック関数の形式でインタフェースのセットを提供した.goqueryライブラリに依存すると、jqueryのようにweb要素を選択できます.
gocollyの公式サイトはhttp://go-colly.org/を選択します.インストールcolly:
コードにパッケージをインポートするには、次の手順に従います.
collyの主体はCollectorオブジェクトであり,ネットワーク通信を管理し,ジョブ実行時に付加的なリターン関数を実行する.collyを使用するには、Collectorを初期化する必要があります.
collyには、ジョブの収集や情報の取得を制御するために、さまざまなタイプのリターン関数を追加できます.フォールバック関数を追加:
ロールバック関数の呼び出し順序は次のとおりです. OnRequestが要求を開始する前に呼び出される OnErrorリクエスト中にエラーが発生した場合に呼び出される OnResponse返信を受信すると呼び出される OnHTMLはOnResponseの後に呼び出され、受信したコンテンツがHTML であれば OnScrapedは、OnHTMLの後に呼び出された 公式に提供されるBasicサンプルコード:
このインスタンス・プログラムは
原文リンク:Golangネットワーク爬虫類フレームワークgocolly/colly一
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)
})
ロールバック関数の呼び出し順序は次のとおりです.
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一