ホームページ >バックエンド開発 >Golang >Golangをクロールする方法

Golangをクロールする方法

王林
王林オリジナル
2023-05-21 19:05:05809ブラウズ

Golang は非常に人気のあるバックエンド プログラミング言語であり、多くのタスクを完了するために使用できますが、その 1 つにクロールがあります。この記事では、Golang を使用して簡単なクローラー プログラムを作成する方法を紹介します。

  1. 準備

クローラーの作成を開始する前に、GoScrape と呼ばれる Golang Web クローラー フレームワークをインストールする必要があります。これを使用する前に、まず GoScrape をインストールする必要があります。

go get github.com/yhat/scrape
  1. クローラーの実装
# クローラーを実装する前に、まずクローラーの目的を決定する必要があります。この例では、Golang を使用して、Zhihu 上の「Golang」に関連する質問をクロールします。

まず、Zhihu サーバーにリクエストを送信し、ページのコンテンツを取得する関数を定義する必要があります。次のコードは、ページ コンテンツを取得する単純な関数を実装します。

func getPageContent(url string) ([]byte, error) {
    res, err := http.Get(url)
    if err != nil {
        return nil, err
    }
    defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        return nil, err
    }

    return body, nil
}

この関数は、Go の標準ライブラリ "net/http" および "io/ioutil" を使用してリクエストを実行し、応答を読み取ります。処理が完了すると、応答の内容とエラー オブジェクトが返されるので、エラーを処理するときにヘルプを得ることができます。

次に、クロールされたページのコンテンツを処理する必要があります。この例では、GoScrape を使用して HTML を解析し、必要な情報を抽出します。ページ コンテンツを解析する関数は次のとおりです。

func extractData(content []byte) {
    root, err := html.Parse(bytes.NewReader(content))
    if err != nil {
        panic(err)
    }

    matcher := func(n *html.Node) bool {
        if n.Type == html.ElementNode && n.Data == "a" {
            for _, attr := range n.Attr {
                if attr.Key == "class" && attr.Val == "question_link" {
                    return true
                }
            }
        }
        return false
    }

    questions := scrape.FindAll(root, matcher)

    for _, q := range questions {
        fmt.Println(scrape.Text(q))
    }
}

この関数は、「golang.org/x/net/html」を使用して HTML を解析し、GoScrape を使用して、ページ内のコンテンツに関連する HTML 要素を見つけます。私たちに必要な質問。この例では、「a」タグとクラス名「question_link」をマッチャーとして使用します。正しく使用すると、このマッチャーは問題のあるすべての接続を含む HTML 要素を返します。最後に、GoScrape のテキスト抽出機能を使用してそれらを抽出します。最後に問題のタイトルをコンソールに出力します。

最後に、これら 2 つの関数を組み合わせて、連続的に実行できるようにします。次のコードは、これらの関数を使用して Zhihu をクロールする方法を示しています。

func main() {
    url := "https://www.zhihu.com/search?type=content&q=golang"

    content, err := getPageContent(url)
    if err != nil {
        panic(err)
    }

    extractData(content)
}

ここでは、前述の 2 つの関数を統合する「メイン」関数を定義します。まず、「getPageContent」関数を呼び出して、Zhihu の検索結果ページを取得します。エラーが発生した場合はプログラムを終了します。そうでない場合は、戻り結果を「extractData」関数に渡します。この関数は、ページのコンテンツを解析して質問のタイトルを抽出し、最終的にコンソールに出力します。

    概要
この記事では、Golang を使用して簡単なクローラー プログラムを作成する方法を紹介します。 GoScrape と標準ライブラリを使用して HTML コンテンツを取得して処理する方法を、ステップごとの説明とともに学びました。実際には、これらの概念を拡張および最適化して、より複雑なクローラの動作を実現できます。

以上がGolangをクロールする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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