C#とIronWebscraperを使ってオンライン映画サイトをスクレイピングする

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronWebscraperは、HTML要素を解析し、構造化されたデータストレージのために型付きオブジェクトを作成し、包括的な映画情報データセットを構築するためにメタデータを使用してページ間をナビゲートすることによって、ウェブサイトから映画データを抽出します。 この C# Web Scraper ライブラリは、構造化されていない Web コンテンツを整理された分析可能なデータに変換することを簡素化します。

クイックスタート: C#でムービーをスクレイピング

1.NuGetパッケージマネージャ経由でIronWebscraperをインストールする 2.WebScraperを継承するクラスを作成する。 3.ライセンスを設定し、ターゲットURLを要求するために、Init()をオーバーライドします。 4.Parse()をオーバーライドして、CSSセレクタを使用してムービーデータを抽出する。 5.JSON形式でデータを保存するには、Scrape()メソッドを使用してください。

Nuget Icon今すぐ NuGet で PDF を作成してみましょう:

  1. NuGet パッケージ マネージャーを使用して IronWebScraper をインストールします

    PM > Install-Package IronWebScraper

  2. このコード スニペットをコピーして実行します。

    using IronWebScraper;
    using System;
    
    public class QuickstartMovieScraper : WebScraper
    {
        public override void Init()
        {
            // Set your license key
            License.LicenseKey = "YOUR-LICENSE-KEY";
    
            // Configure scraper settings
            this.LoggingLevel = LogLevel.All;
            this.WorkingDirectory = @"C:\MovieData\Output\";
    
            // Start scraping from the homepage
            this.Request("https://example-movie-site.com", Parse);
        }
    
        public override void Parse(Response response)
        {
            // Extract movie titles using CSS selectors
            foreach (var movieDiv in response.Css(".movie-item"))
            {
                var title = movieDiv.Css("h2")[0].TextContentClean;
                var url = movieDiv.Css("a")[0].Attributes["href"];
    
                // Save the scraped data
                Scrape(new { Title = title, Url = url }, "movies.json");
            }
        }
    }
    
    // Run the scraper
    var scraper = new QuickstartMovieScraper();
    scraper.Start();
  3. 実際の環境でテストするためにデプロイする

    今すぐ無料トライアルでプロジェクトに IronWebScraper を使い始めましょう
    arrow pointer

どのようにムービースクレーパークラスをセットアップしますか?

実際のウェブサイトの例から始めます。 Webscraping in C# チュートリアルで説明したテクニックを使って、映画のウェブサイトをスクレイピングします。

新しいクラスを追加しMovieScraperと名付けます:

IronScraperSampleプロジェクトのVisual C#テンプレート・オプションを表示するVisual Studioの新規項目追加ダイアログ

専用のスクレーパークラスを作成することで、コードを整理し、再利用可能にすることができます。 このアプローチは、オブジェクト指向の原則に従い、後で簡単に機能を拡張することができます。

ターゲットとなるウェブサイトの構造はどのようなものですか?

スクレイピングのためにサイト構造を調べます。 効果的なウェブスクレイピングには、ウェブサイトの構造を理解することが重要です。 オンライン映画ウェブサイトからのスクレイピングのガイドと同様に、最初にHTML構造を分析します:

ナビゲーション タブと品質インジケータを備えた映画ポスターのグリッドを示す映画ストリーミング ウェブサイトのインターフェイス.

どの HTML 要素にムービー データが含まれていますか?

これは、ウェブサイト上で見られるホームページのHTMLの一部です。HTMLの構造を調べることで、使用すべき正しいCSSセレクタを特定することができます:

<div id="movie-featured" class="movies-list movies-list-full tab-pane in fade active">
    <div data-movie-id="20746" class="ml-item">
        <a href="https://website.com/film/king-arthur-legend-of-the-sword-20746/">
            <span class="mli-quality">CAM</span>
            <img data-original="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg" 
                 class="lazy thumb mli-thumb" alt="King Arthur: Legend of the Sword"
                 src="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg" 
                 style="display: inline-block;">
            <span class="mli-info"><h2>King Arthur: Legend of the Sword</h2></span>
        </a>
    </div>
    <div data-movie-id="20724" class="ml-item">
        <a href="https://website.com/film/snatched-20724/">
            <span class="mli-quality">CAM</span>
            <img data-original="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg" 
                 class="lazy thumb mli-thumb" alt="Snatched" 
                 src="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg" 
                 style="display: inline-block;">
            <span class="mli-info"><h2>Snatched</h2></span>
        </a>
    </div>
</div>
<div id="movie-featured" class="movies-list movies-list-full tab-pane in fade active">
    <div data-movie-id="20746" class="ml-item">
        <a href="https://website.com/film/king-arthur-legend-of-the-sword-20746/">
            <span class="mli-quality">CAM</span>
            <img data-original="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg" 
                 class="lazy thumb mli-thumb" alt="King Arthur: Legend of the Sword"
                 src="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg" 
                 style="display: inline-block;">
            <span class="mli-info"><h2>King Arthur: Legend of the Sword</h2></span>
        </a>
    </div>
    <div data-movie-id="20724" class="ml-item">
        <a href="https://website.com/film/snatched-20724/">
            <span class="mli-quality">CAM</span>
            <img data-original="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg" 
                 class="lazy thumb mli-thumb" alt="Snatched" 
                 src="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg" 
                 style="display: inline-block;">
            <span class="mli-info"><h2>Snatched</h2></span>
        </a>
    </div>
</div>
HTML

ムービーID、タイトル、詳細ページへのリンクがあります。 各ムービーは、ml-itemクラスのdiv要素に含まれ、識別のために固有のdata-movie-id属性を含んでいます。

基本的なムービースクレイピングを実装するには? このデータセットのスクレイピングを開始します。 スクレイパーを実行する前に、以下に示すようにライセンスキーが適切に設定されていることを確認してください: ```csharp public class MovieScraper : WebScraper { public override void Init() { // Initialize scraper settings License.LicenseKey = "LicenseKey"; this.LoggingLevel = WebScraper.LogLevel.All; this.WorkingDirectory = AppSetting.GetAppRoot() + @"\MovieSample\Output\"; // Request homepage content for scraping this.Request("www.website.com", Parse); } public override void Parse(Response response) { // Iterate over each movie div within the featured movie section foreach (var div in response.Css("#movie-featured > div")) { if (div.Attributes["class"] != "clearfix") { var movieId = Convert.ToInt32(div.GetAttribute("data-movie-id")); var link = div.Css("a")[0]; var movieTitle = link.TextContentClean; // Scrape and store movie data as key-value pairs Scrape(new ScrapedData() { { "MovieId", movieId }, { "MovieTitle", movieTitle } }, "Movie.Jsonl"); } } } } ``` ### 作業ディレクトリ プロパティは何のためですか? *このコードの新機能は何ですか*? Working Directoryプロパティは、すべてのスクレイピングデータと関連ファイルのメイン作業ディレクトリを設定します。 これにより、すべての出力ファイルが単一の場所に整理され、大規模なスクレイピングプロジェクトの管理が容易になります。 ディレクトリが存在しない場合は、自動的に作成されます。 ### どのような場合に CSS セレクタと属性を使い分ける必要がありますか? *その他の考慮事項* CSSセレクタは、構造的な位置やクラス名で要素をターゲットにする場合に理想的ですが、IDやカスタムデータ属性のような特定の値を抽出するには、属性への直接アクセスが適しています。 この例では、CSSセレクタ(`#movie-featured > div`)を使ってDOM構造をナビゲートし、属性(`data-movie-id`)を使って特定の値を抽出しています。 ## スクレイピングされたデータ用に型付きオブジェクトを作成するにはどうすればよいですか? スクレイピングされたデータをフォーマットされたオブジェクトに保持するための型付きオブジェクトを構築する。 強く型付けされたオブジェクトを使用することで、より良いコード構成、インテリセンスのサポート、コンパイル時の型チェックを提供します。 フォーマットされたデータを保持する `Movie` クラスを実装してください: ```csharp public class Movie { public int Id { get; set; } public string Title { get; set; } public string URL { get; set; } } ``` ### 型付きオブジェクトの使用はどのようにデータ整理を改善しますか? 汎用の`ScrapedData`辞書の代わりに、型付き`Movie`クラスを使用するようにコードを更新してください: ```csharp public class MovieScraper : WebScraper { public override void Init() { // Initialize scraper settings License.LicenseKey = "LicenseKey"; this.LoggingLevel = WebScraper.LogLevel.All; this.WorkingDirectory = AppSetting.GetAppRoot() + @"\MovieSample\Output\"; // Request homepage content for scraping this.Request("https://website.com/", Parse); } public override void Parse(Response response) { // Iterate over each movie div within the featured movie section foreach (var div in response.Css("#movie-featured > div")) { if (div.Attributes["class"] != "clearfix") { var movie = new Movie { Id = Convert.ToInt32(div.GetAttribute("data-movie-id")) }; var link = div.Css("a")[0]; movie.Title = link.TextContentClean; movie.URL = link.Attributes["href"]; // Scrape and store movie object Scrape(movie, "Movie.Jsonl"); } } } } ``` ### スクレイプメソッドは型付きオブジェクトに対してどのようなフォーマットを使用しますか? *新着情報* 1.私たちは、スクレイピングされたデータを保持するために`Movie`クラスを実装し、型の安全性とより良いコード構成を提供しました。 2.ムービーオブジェクトを`Scrape`メソッドに渡すと、メソッドは私たちのフォーマットを理解し、以下のように定義された方法で保存します:

タイトル、URL、メタデータフィールドを含む、構造化された映画データを持つJSON映画データベースを表示するメモ帳ウィンドウ

出力は自動的にJSON形式にシリアライズされるため、データベースや他のアプリケーションに簡単にインポートできます。

詳細なムービーページをスクレイピングするには? より詳細なページのスクレイピングを開始します。 複数ページのスクレイピングは一般的な要件であり、IronWebScraperはリクエスト・チェイニング・メカニズムによってそれを簡単にします。 ### 詳細ページからどのような追加データを抽出できますか? ムービーページはこのようになっており、各作品に関する豊富なメタデータが含まれています:

映画  related to どの HTML 要素にムービー データが含まれていますか?