検索
ホームページバックエンド開発GolangWebスクレイピングを始める

最初のステップ

まず、Go をインストールする必要があります。Go をダウンロードしてインストールする手順を説明します。

プロジェクト用に新しいフォルダーを作成し、そのディレクトリに移動して、次のコマンドを実行します。

go mod init scraper

? go mod init コマンドは、実行されるディレクトリで新しい Go モジュールを初期化し、コードの依存関係を追跡するための go.mod ファイルを作成するために使用されます。依存関係の管理

Colibri をインストールしましょう:

go get github.com/gonzxlez/colibri

? Colibri は、JSON で定義された一連のルールを使用して、Web 上の構造化データをクロールおよび抽出できる Go パッケージです。リポジトリ


抽出ルール

必要なデータを抽出するために colibri が使用するルールを定義します。ドキュメント

URL https://pkg.go.dev/search?q=xpath に対して HTTP リクエストを作成します。これには、Go パッケージ内の xpath に関連する Go パッケージのクエリの結果が含まれます。

Web ブラウザに含まれる開発ツールを使用して、ページの HTML 構造を検査できます。ブラウザ開発ツールとは何ですか?

Web Scraping en Go

<div class="SearchSnippet">
   <div class="SearchSnippet-headerContainer">
      <h2>
         <a href="/github.com/antchfx/xpath" data-gtmc="search result" data-gtmv="0" data-test-id="snippet-title">
         xpath
         <span class="SearchSnippet-header-path">(github.com/antchfx/xpath)</span>
         </a>
      </h2>
   </div>
   <div class="SearchSnippet-infoLabel">
      <a href="/github.com/antchfx/xpath?tab=importedby" aria-label="Go to Imported By">
      <span class="go-textSubtle">Imported by </span><strong>143</strong>
      </a>
      <span class="go-textSubtle">|</span>
      <span class="go-textSubtle">
      <strong>v1.2.5</strong> published on <span data-test-id="snippet-published"><strong>Oct 26, 2023</strong></span>
      </span>
      <span class="go-textSubtle">|</span>
      <span data-test-id="snippet-license">
      <a href="/github.com/antchfx/xpath?tab=licenses" aria-label="Go to Licenses">
      MIT
      </a>
      </span>
   </div>
</div>

クエリの結果を表す HTML 構造のフラグメント。

次に、クラス SearchSnippet を持つ HTML 内のすべての div 要素を検索するセレクター “packages” が必要です。これらの要素からセレクター “ name” は、要素 h2 内の要素 a のテキストとセレクター「path” は、 内の a 要素の href 属性の値を受け取ります。 h2 要素。つまり、「name」 は Go パッケージの名前を受け取り、「path」 はパッケージのパスを受け取ります :)

{
    "method": "GET",
    "url":    "https://pkg.go.dev/search?q=xpath",
    "timeout": 10000,
    "selectors": {
        "packages": {
            "expr": "div.SearchSnippet",
            "all": true,
            "type": "css",
            "selectors": {
                "name": "//h2/a/text()",
                "path": "//h2/a/@href"
            }
        }
    }
}
    メソッド:
  • は、HTTP メソッド (GET、POST、PUT など) を指定します。
  • url:
  • リクエストの URL。
  • timeout:
  • HTTP リクエストのタイムアウト (ミリ秒単位)。
  • セレクター:
  • セレクター。
      “packages”
    • : はセレクターの名前です。
        expr:
      • セレクター式。
      • all:
      • は、式に一致するすべての要素が検索されることを指定します。
      • type:
      • 式のタイプ (この場合は CSS セレクター)。
      • セレクター:
      • ネストされたセレクター。
          “name”
        • “path” はセレクターの名前であり、その値は式、この場合は XPath 式です。
Go でコードを作成する

scraper.go ファイルを作成し、必要なパッケージをインポートして main 関数を定義する準備ができました。


package main

import (
    "encoding/json"
    "fmt"

    "github.com/gonzxlez/colibri"
    "github.com/gonzxlez/colibri/webextractor"
)

var rawRules = `{
    "method": "GET",
    "url":    "https://pkg.go.dev/search?q=xpath",
    "timeout": 10000,
    "selectors": {
        "packages": {
            "expr": "div.SearchSnippet",
            "all": true,
            "type": "css",
            "selectors": {
                "name": "//h2/a/text()",
                "path": "//h2/a/@href"
            }
        }
    }
}`

func main() {
    we, err := webextractor.New()
    if err != nil {
        panic(err)
    }

    var rules colibri.Rules
    err = json.Unmarshal([]byte(rawRules), &rules)
    if err != nil {
        panic(err)
    }

    output, err := we.Extract(&rules)
    if err != nil {
        panic(err)
    }

    fmt.Println("URL:", output.Response.URL())
    fmt.Println("Status code:", output.Response.StatusCode())
    fmt.Println("Content-Type", output.Response.Header().Get("Content-Type"))
    fmt.Println("Data:", output.Data)
}
? WebExtractor は、Web 上のデータのクロールまたは抽出を開始できる Colibri のデフォルト インターフェイスです。

webextractor の新しい機能を使用して、データの抽出を開始するために必要なものを含む Colibri 構造を生成します。

次に、JSON 内のルールを Rules 構造に変換し、Extract メソッドを呼び出してルールを引数として送信します。

出力を取得し、HTTP 応答の URL、HTTP ステータス コード、応答のコンテンツ タイプ、セレクターで抽出されたデータが画面に表示されます。出力構造についてはドキュメントを参照してください。

次のコマンドを実行します:


go mod tidy
? go mod tiny コマンドは、go.mod 内の依存関係がモジュールのソース コードと一致していることを確認します。

最後に、次のコマンドを使用して Go でコードをコンパイルして実行します。


go run scraper.go
結論

この投稿では、Colibri パッケージを使用して Go で Web スクレイピングを実行し、CSS および XPath セレクターで抽出ルールを定義する方法を学びました。 Colibri は、Go での Web データ収集の自動化を検討している人向けのツールとして登場します。ルールベースのアプローチと使いやすさにより、あらゆる経験レベルの開発者にとって魅力的なオプションとなっています。

つまり、Go の Web スクレイピングは、幅広い Web サイトから情報を抽出するために使用できる強力で多用途なテクニックです。 Web スクレイピングは、Web サイトの利用規約を尊重し、サーバーの過負荷を避けて倫理的に実行する必要があることを強調することが重要です。

以上がWebスクレイピングを始めるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?Mar 03, 2025 pm 05:17 PM

この記事では、Goのパッケージインポートメカニズム:名前付きインポート(例:インポート "fmt&quot;)および空白のインポート(例:_&quot; fmt&quot;)について説明しています。 名前付きインポートはパッケージのコンテンツにアクセス可能になり、空白のインポートはtのみを実行します

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?Mar 03, 2025 pm 05:18 PM

この記事では、MySQLクエリの結果をGO structスライスに効率的に変換することを詳しく説明しています。 データベース/SQLのスキャン方法を使用して、手動で解析することを避けて強調しています。 DBタグとロブを使用した構造フィールドマッピングのベストプラクティス

Beegoフレームワークのページ間で短期情報転送を実装する方法は?Beegoフレームワークのページ間で短期情報転送を実装する方法は?Mar 03, 2025 pm 05:22 PM

この記事では、Webアプリケーションでのページ間データ転送のためのBeegoのnewflash()関数について説明します。 newflash()を使用して、コントローラー間で一時的なメッセージ(成功、エラー、警告)を表示し、セッションメカニズムを活用することに焦点を当てています。 リミア

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?Mar 10, 2025 pm 05:38 PM

この記事では、ユニットテストのためにGOのモックとスタブを作成することを示しています。 インターフェイスの使用を強調し、模擬実装の例を提供し、模擬フォーカスを維持し、アサーションライブラリを使用するなどのベストプラクティスについて説明します。 articl

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?Mar 10, 2025 pm 03:20 PM

この記事では、GENICSのGOのカスタムタイプの制約について説明します。 インターフェイスがジェネリック関数の最小タイプ要件をどのように定義するかを詳しく説明し、タイプの安全性とコードの再利用性を改善します。 この記事では、制限とベストプラクティスについても説明しています

Go言語でファイルを便利に書く方法は?Go言語でファイルを便利に書く方法は?Mar 03, 2025 pm 05:15 PM

この記事では、goで効率的なファイルの書き込みを詳しく説明し、os.writefile(小さなファイルに適している)とos.openfileおよびbuffered write(大規模ファイルに最適)と比較します。 延期エラー処理、Deferを使用し、特定のエラーをチェックすることを強調します。

Goでユニットテストをどのように書きますか?Goでユニットテストをどのように書きますか?Mar 21, 2025 pm 06:34 PM

この記事では、GOでユニットテストを書くことで、ベストプラクティス、モッキングテクニック、効率的なテスト管理のためのツールについて説明します。

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?Mar 10, 2025 pm 05:36 PM

この記事では、トレースツールを使用してGOアプリケーションの実行フローを分析します。 手動および自動計装技術について説明し、Jaeger、Zipkin、Opentelemetryなどのツールを比較し、効果的なデータの視覚化を強調しています

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール