ホームページ  >  記事  >  バックエンド開発  >  golang にはクローラーがありますか?

golang にはクローラーがありますか?

WBOY
WBOYオリジナル
2023-05-13 09:28:36668ブラウズ

インターネットの発展に伴い、ネットワーク情報はますます豊富になってきましたが、一部の Web サイトやアプリケーションからデータを効率的に取得する方法は、多くの開発者が直面する大きな課題となっています。以前は、多くの開発者がクローラ開発に Python や Java などの言語を使用していましたが、近年では、クローラ開発に golang を使用する開発者が増えています。

それでは、golang にはクローラーがあるのでしょうか?答えは「はい」です。 Go 言語の標準ライブラリにはすでに HTTP リクエストとネットワーク プロトコルのサポートが組み込まれており、サードパーティ ライブラリにも豊富な選択肢があります。この記事では、開発者がクローラー開発における golang の使用をよりよく理解できるように、一般的に使用されるいくつかの golang クローラー ライブラリを紹介します。

  1. goquery

goquery は、jQuery 構文に基づく HTML パーサーで、Go 言語のセレクター構文を使用して HTML ドキュメントのクエリと解析を行います。このライブラリは、jQuery の一般的なセレクターおよびメソッドと完全な互換性があるため、開発者にとって非常に使いやすいものになっています。

goquery を使用すると、HTML ドキュメントから必要なデータを簡単に解析できます。たとえば、次のコードを使用して、Baidu の検索結果からタイトルと URL を取得できます。

package main

import (
    "fmt"
    "github.com/PuerkitoBio/goquery"
    "log"
)

func main() {
    url := "https://www.baidu.com/s?wd=golang"
    doc, err := goquery.NewDocument(url)
    if err != nil {
        log.Fatal(err)
    }

    doc.Find("#content_left h3 a").Each(func(i int, s *goquery.Selection) {
        title := s.Text()
        link, _ := s.Attr("href")
        fmt.Printf("%d. %s - %s
", i+1, title, link)
    })
}

このコードは、goquery を使用して Baidu の検索結果ページを解析し、各検索結果のタイトルと URL を抽出します。 goquery ライブラリの Find メソッドは、CSS セレクターまたは XPath 式を使用して要素を検索できることに注意してください。

  1. colly

colly は、非同期ネットワーク リクエスト、自動再試行、データ抽出、プロキシ設定、その他の機能をサポートする、非常に柔軟で構成可能な Golang クローラー フレームワークです。 Colly の助けを借りて、安定した効率的なクローラー プログラムを迅速に作成できます。

次は、Baidu 検索結果をクロールする簡単な例です。

package main

import (
    "fmt"
    "github.com/gocolly/colly"
)

func main() {
    c := colly.NewCollector()

    c.OnHTML("#content_left h3 a", func(e *colly.HTMLElement) {
        title := e.Text
        link := e.Attr("href")
        fmt.Printf("%s - %s
", title, link)
    })

    c.Visit("https://www.baidu.com/s?wd=golang")
}

このコードは、colly フレームワークを使用して、Baidu 検索結果ページを解析し、各検索結果のタイトルと URL を抽出します。なお、collyライブラリのOnHTMLメソッドではHTML要素のセレクタを指定し、該当要素が一致した場合にコールバック関数を実行することができます。

  1. go_spider

go_spider は、golang に基づいた同時実行性の高いクローラー フレームワークであり、複数のデータ ストレージ方法、分散クローリング、データ重複排除、データ フィルタリングなどの特徴をサポートしています。 。 go_spider の助けを借りて、高性能のクローラー アプリケーションを簡単に構築できます。

以下は、go_spider フレームワークを使用して Baidu 検索結果をクロールする例です:

package main

import (
    "fmt"
    "github.com/hu17889/go_spider/core/common/page"
    "github.com/hu17889/go_spider/core/pipeline"
    "github.com/hu17889/go_spider/core/spider"
    "github.com/hu17889/go_spider/core/spider/parsers"
    "github.com/hu17889/go_spider/core/spider/parsers/common"
)

type BaiduResult struct {
    Title string `json:"title"`
    Link  string `json:"link"`
}

func main() {
    s := spider.NewSpider(nil)

    s.SetStartUrl("https://www.baidu.com/s?wd=golang")
    s.SetThreadnum(5)

    s.SetParseFunc(func(p *page.Page) {
        results := make([]*BaiduResult, 0)
        sel := parsers.Selector(p.GetBody())

        sel.Find("#content_left h3 a").Each(func(i int, s *common.Selection) {
            title := s.Text()
            link, ok := s.Attr("href")

            if ok && len(title) > 0 && len(link) > 0 {
                result := &BaiduResult{
                    Title: title,
                    Link:  link,
                }
                results = append(results, result)
            }
        })

        p.AddResultItem("results", results)
    })

    s.SetPipeline(pipeline.NewJsonWriterPipeline("results.json"))

    s.Run()
}

このコードは、go_spider フレームワークを使用して Baidu 検索結果ページを解析し、各ページのタイトルと URL を抽出します。検索結果。結果を JSON 形式で保存します。 go_spider は豊富なデータ解析および保存方法を提供しており、ニーズに応じてさまざまな構成方法を選択できることに注意してください。

概要

この記事では、goquery、colly、go_spider など、golang で一般的に使用されるいくつかのクローラー ライブラリとフレームワークを紹介します。これらのライブラリやフレームワークを使用する場合は、不必要な紛争を避けるために、クローラーの規約や Web サイトの法規制に従う必要があることに注意してください。さらに、golang は、クローラ開発において、シンプルさ、使いやすさ、高性能、拡張性の高さという利点を備えており、開発者が詳細に研究して使用する価値があります。

以上がgolang にはクローラーがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。