Webスクレイピングを始める

王林
リリース: 2024-09-10 14:30:32
オリジナル
675 人が閲覧しました

最初のステップ

まず、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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート