Scraping einer Online-Film-Website mit C#35; und IronWebScraper

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

IronWebScraper extrahiert Filmdaten aus Websites, indem es HTML-Elemente analysiert, typisierte Objekte für die strukturierte Datenspeicherung erstellt und mit Hilfe von Metadaten zwischen den Seiten navigiert, um umfassende Filminformationsdatensätze zu erstellen. Diese C# Web Scraper Bibliothek vereinfacht die Umwandlung von unstrukturierten Webinhalten in organisierte, analysierbare Daten.

als-Überschrift:2(Schnellstart: Scrape Movies in C#)

  1. IronWebscraper über NuGet Package Manager installieren
  2. Erstellen Sie eine Klasse, die von WebScraper erbt
  3. Überschreiben Sie Init(), um die Lizenz festzulegen und die Ziel-URL abzufragen
  4. Überschreiben Sie Parse(), um Filmdaten mit CSS-Selektoren zu extrahieren
  5. Verwenden Sie die Methode Scrape(), um Daten im JSON-Format zu speichern

Nuget IconLegen Sie jetzt mit NuGet los, um PDFs zu erstellen:

  1. Installieren Sie IronWebScraper mit dem NuGet-Paketmanager.

    PM > Install-Package IronWebScraper

  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    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. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute mit der Nutzung von IronWebScraper in Ihrem Projekt – mit einer kostenlosen Testversion.
    arrow pointer

Wie richte ich eine Movie Scraper-Klasse ein?

Beginnen Sie mit einem realen Website-Beispiel. Wir scrapen eine Film-Website mit den Techniken, die in unserem Webscraping in C#-Tutorial beschrieben sind.

Fügen Sie eine neue Klasse hinzu und nennen Sie sie MovieScraper:

Visual Studio Dialogfeld

Die Erstellung einer eigenen Scraper-Klasse hilft bei der Organisation Ihres Codes und macht ihn wiederverwendbar. Dieser Ansatz folgt objektorientierten Prinzipien und ermöglicht es Ihnen, die Funktionalität später einfach zu erweitern.

Wie sieht die Struktur der Ziel-Website aus?

Untersuchen Sie die Struktur der Website auf Scraping. Für ein effektives Web-Scraping ist es wichtig, die Struktur der Website zu verstehen. Ähnlich wie in unserem Leitfaden zum Scraping von einer Online-Film-Website analysieren Sie zunächst die HTML-Struktur:

Film-Streaming-Website-Schnittstelle zeigt Raster von Filmplakaten mit Navigations-Tabs und Qualitätsanzeigen

Welche HTML-Elemente enthalten Filmdaten?

Dies ist ein Teil der HTML-Homepage, die wir auf der Website sehen. Die Untersuchung der HTML-Struktur hilft dabei, die richtigen CSS-Selektoren zu identifizieren:

<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

Wir haben eine Film-ID, einen Titel und einen Link zu einer Detailseite. Jeder Film ist in einem div-Element mit der Klasse ml-item enthalten und enthält ein eindeutiges data-movie-id-Attribut zur Identifizierung.

Wie implementiere ich grundlegendes Movie Scraping?

Beginnen Sie mit dem Scrapen dieses Datensatzes. Bevor Sie einen Scraper ausführen, stellen Sie sicher, dass Sie Ihren Lizenzschlüssel richtig konfiguriert haben, wie unten gezeigt:

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");
            }
        }           
    }
}
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");
            }
        }           
    }
}
$vbLabelText   $csharpLabel

Wozu dient die Eigenschaft Arbeitsverzeichnis?

Was ist neu in diesem Code?

Die Eigenschaft Arbeitsverzeichnis legt das Hauptarbeitsverzeichnis für alle gescrapten Daten und zugehörigen Dateien fest. Dadurch wird sichergestellt, dass alle Ausgabedateien an einem einzigen Ort organisiert sind, was die Verwaltung umfangreicher Scraping-Projekte erleichtert. Das Verzeichnis wird automatisch erstellt, wenn es noch nicht existiert.

Wann sollte ich CSS-Selektoren gegenüber Attributen verwenden?

Zusätzliche Überlegungen:

CSS-Selektoren sind ideal, um Elemente anhand ihrer strukturellen Position oder ihrer Klassennamen anzusprechen, während der direkte Zugriff auf Attribute besser geeignet ist, um bestimmte Werte wie IDs oder benutzerdefinierte Datenattribute zu extrahieren. In unserem Beispiel verwenden wir CSS-Selektoren (#movie-featured > div), um in der DOM-Struktur zu navigieren, und Attribute (data-movie-id), um bestimmte Werte zu extrahieren.

Wie erstelle ich typisierte Objekte für gescrapte Daten?

Erstellen Sie typisierte Objekte, um gescrapte Daten in formatierten Objekten zu speichern. Die Verwendung von stark typisierten Objekten bietet eine bessere Codeorganisation, IntelliSense-Unterstützung und Typüberprüfung während der Kompilierung.

Implementieren Sie eine Movie-Klasse, die formatierte Daten enthält:

public class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string URL { get; set; }
}
public class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string URL { get; set; }
}
$vbLabelText   $csharpLabel

Wie kann die Verwendung typisierter Objekte die Datenorganisation verbessern?

Aktualisieren Sie den Code, um die typisierte Movie-Klasse anstelle des generischen ScrapedData-Wörterbuchs zu verwenden:

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");
            }
        }
    }
}
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");
            }
        }
    }
}
$vbLabelText   $csharpLabel

Welches Format verwendet die Scrape-Methode für typisierte Objekte?

Was ist neu?

  1. Wir haben eine Movie-Klasse implementiert, um gescrapte Daten zu speichern, die Typsicherheit und eine bessere Code-Organisation bietet.
  2. Wir übergeben Filmobjekte an die Scrape-Methode, die unser Format versteht und es in einer definierten Weise speichert, wie unten gezeigt:

Notepad-Fenster zeigt JSON-Filmdatenbank mit strukturierten Filmdaten einschließlich Titeln, URLs und Metadatenfeldern

Die Ausgabe wird automatisch in das JSON-Format serialisiert, so dass sie leicht in Datenbanken oder andere Anwendungen importiert werden kann.

Wie kann ich detaillierte Filmseiten scrapen?

Beginnen Sie mit dem Scannen detaillierterer Seiten. Das Scraping von mehreren Seiten ist eine häufige Anforderung, und IronWebScraper macht dies durch seinen Mechanismus zur Verkettung von Anfragen einfach.

Welche zusätzlichen Daten kann ich aus Detailseiten extrahieren?

Die Filmseite sieht wie folgt aus und enthält umfangreiche Metadaten zu jedem Film:

Guardians of the Galaxy Vol. 2 Filminfoseite mit Poster und Filmdetails einschließlich Besetzung und Bewertungen

<div class="mvi-content">
    <div class="thumb mvic-thumb" 
         style="background-image: url(https://img.gocdn.online/2017/04/28/poster/5a08e94ba02118f22dc30f298c603210-guardians-of-the-galaxy-vol-2.jpg);"></div>
    <div class="mvic-desc">
        <h3>Guardians of the Galaxy Vol. 2</h3>        
        <div class="desc">
            Set to the backdrop of Awesome Mixtape #2, Marvel's Guardians of the Galaxy Vol. 2 continues the team's adventures as they travel throughout the cosmos to help Peter Quill learn more about his true parentage.
        </div>
        <div class="mvic-info">
            <div class="mvici-left">
                <p>
                    <strong>Genre: </strong>
                    <a href="https://Domain/genre/action/" title="Action">Action</a>,
                    <a href="https://Domain/genre/adventure/" title="Adventure">Adventure</a>,
                    <a href="https://Domain/genre/sci-fi/" title="Sci-Fi">Sci-Fi</a>
                </p>
                <p>
                    <strong>Actor: </strong>
                    <a target="_blank" href="https://Domain/actor/chris-pratt" title="Chris Pratt">Chris Pratt</a>,
                    <a target="_blank" href="https://Domain/actor/-zoe-saldana" title="Zoe Saldana">Zoe Saldana</a>,
                    <a target="_blank" href="https://Domain/actor/-dave-bautista-" title="Dave Bautista">Dave Bautista</a>
                </p>
                <p>
                    <strong>Director: </strong>
                    <a href="#" title="James Gunn">James Gunn</a>
                </p>
                <p>
                    <strong>Country: </strong>
                    <a href="https://Domain/country/us" title="United States">United States</a>
                </p>
            </div>
            <div class="mvici-right">
                <p><strong>Duration:</strong> 136 min</p>
                <p><strong>Quality:</strong> <span class="quality">CAM</span></p>
                <p><strong>Release:</strong> 2017</p>
                <p><strong>IMDb:</strong> 8.3</p>
            </div>
            <div class="clearfix"></div>
        </div>
        <div class="clearfix"></div>
    </div>
    <div class="clearfix"></div>
</div>
<div class="mvi-content">
    <div class="thumb mvic-thumb" 
         style="background-image: url(https://img.gocdn.online/2017/04/28/poster/5a08e94ba02118f22dc30f298c603210-guardians-of-the-galaxy-vol-2.jpg);"></div>
    <div class="mvic-desc">
        <h3>Guardians of the Galaxy Vol. 2</h3>        
        <div class="desc">
            Set to the backdrop of Awesome Mixtape #2, Marvel's Guardians of the Galaxy Vol. 2 continues the team's adventures as they travel throughout the cosmos to help Peter Quill learn more about his true parentage.
        </div>
        <div class="mvic-info">
            <div class="mvici-left">
                <p>
                    <strong>Genre: </strong>
                    <a href="https://Domain/genre/action/" title="Action">Action</a>,
                    <a href="https://Domain/genre/adventure/" title="Adventure">Adventure</a>,
                    <a href="https://Domain/genre/sci-fi/" title="Sci-Fi">Sci-Fi</a>
                </p>
                <p>
                    <strong>Actor: </strong>
                    <a target="_blank" href="https://Domain/actor/chris-pratt" title="Chris Pratt">Chris Pratt</a>,
                    <a target="_blank" href="https://Domain/actor/-zoe-saldana" title="Zoe Saldana">Zoe Saldana</a>,
                    <a target="_blank" href="https://Domain/actor/-dave-bautista-" title="Dave Bautista">Dave Bautista</a>
                </p>
                <p>
                    <strong>Director: </strong>
                    <a href="#" title="James Gunn">James Gunn</a>
                </p>
                <p>
                    <strong>Country: </strong>
                    <a href="https://Domain/country/us" title="United States">United States</a>
                </p>
            </div>
            <div class="mvici-right">
                <p><strong>Duration:</strong> 136 min</p>
                <p><strong>Quality:</strong> <span class="quality">CAM</span></p>
                <p><strong>Release:</strong> 2017</p>
                <p><strong>IMDb:</strong> 8.3</p>
            </div>
            <div class="clearfix"></div>
        </div>
        <div class="clearfix"></div>
    </div>
    <div class="clearfix"></div>
</div>
HTML

Wie sollte ich meine Filmklasse um zusätzliche Eigenschaften erweitern?

Erweitern Sie die Klasse Movie um neue Eigenschaften (Description, Genre, Actor, Director, Country, Dauer, IMDb Score), aber verwenden Sie für dieses Beispiel nur Beschreibung, Genre und Darsteller. Die Verwendung von List<string> für Genres und Akteure ermöglicht eine elegante Handhabung mehrerer Werte:

using System.Collections.Generic;

public class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string URL { get; set; }
    public string Description { get; set; }
    public List<string> Genre { get; set; }
    public List<string> Actor { get; set; }
}
using System.Collections.Generic;

public class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string URL { get; set; }
    public string Description { get; set; }
    public List<string> Genre { get; set; }
    public List<string> Actor { get; set; }
}
$vbLabelText   $csharpLabel

Wie kann ich beim Scraping zwischen den Seiten navigieren?

Navigieren Sie zu der detaillierten Seite, um sie zu scrapen. IronWebScraper behandelt Thread-Sicherheit automatisch, so dass mehrere Seiten gleichzeitig verarbeitet werden können.

Warum mehrere Parse-Funktionen für verschiedene Seitentypen verwenden?

IronWebScraper ermöglicht das Hinzufügen mehrerer Scrape-Funktionen, um verschiedene Seitenformate zu verarbeiten. Diese Trennung von Belangen macht Ihren Code wartungsfreundlicher und ermöglicht einen angemessenen Umgang mit unterschiedlichen Seitenstrukturen. Jede Parse-Funktion kann sich auf die Extraktion von Daten aus einem bestimmten Seitentyp konzentrieren.

Wie helfen MetaDaten bei der Übergabe von Objekten zwischen Parse-Funktionen?

Die MetaData-Funktion ist entscheidend für die Aufrechterhaltung des Zustands zwischen Anfragen. Weitere erweiterte Webscraping-Funktionen finden Sie in unserem ausführlichen Leitfaden:

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://domain/", 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"];

                // Request detailed page
                this.Request(movie.URL, ParseDetails, new MetaData() { { "movie", movie } });
            }
        }           
    }

    public void ParseDetails(Response response)
    {
        // Retrieve movie object from metadata
        var movie = response.MetaData.Get<Movie>("movie");
        var div = response.Css("div.mvic-desc")[0];

        // Extract description
        movie.Description = div.Css("div.desc")[0].TextContentClean;

        // Extract genres
        movie.Genre = new List<string>(); // Initialize genre list
        foreach(var genre in div.Css("div > p > a"))
        {
            movie.Genre.Add(genre.TextContentClean);
        }

        // Extract actors
        movie.Actor = new List<string>(); // Initialize actor list
        foreach (var actor in div.Css("div > p:nth-child(2) > a"))
        {
            movie.Actor.Add(actor.TextContentClean);
        }

        // Scrape and store detailed movie data
        Scrape(movie, "Movie.Jsonl");
    }
}
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://domain/", 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"];

                // Request detailed page
                this.Request(movie.URL, ParseDetails, new MetaData() { { "movie", movie } });
            }
        }           
    }

    public void ParseDetails(Response response)
    {
        // Retrieve movie object from metadata
        var movie = response.MetaData.Get<Movie>("movie");
        var div = response.Css("div.mvic-desc")[0];

        // Extract description
        movie.Description = div.Css("div.desc")[0].TextContentClean;

        // Extract genres
        movie.Genre = new List<string>(); // Initialize genre list
        foreach(var genre in div.Css("div > p > a"))
        {
            movie.Genre.Add(genre.TextContentClean);
        }

        // Extract actors
        movie.Actor = new List<string>(); // Initialize actor list
        foreach (var actor in div.Css("div > p:nth-child(2) > a"))
        {
            movie.Actor.Add(actor.TextContentClean);
        }

        // Scrape and store detailed movie data
        Scrape(movie, "Movie.Jsonl");
    }
}
$vbLabelText   $csharpLabel

Was sind die Hauptmerkmale dieses Multi-Page-Scraping-Ansatzes?

Was ist neu?

  1. Hinzufügen von Scrape-Funktionen (z. B. ParseDetails) zum Scrapen von Detailseiten, ähnlich wie beim Scraping von einer Shopping-Website.
  2. Verschieben Sie die Scrape-Funktion, die Dateien generiert, in die neue Funktion und stellen Sie sicher, dass die Daten erst dann gespeichert werden, wenn alle Details erfasst sind.
  3. Verwenden Sie die IronWebscraper-Funktion (MetaData), um Filmobjekte an neue Scrape-Funktionen zu übergeben und den Objektstatus über Anfragen hinweg zu erhalten.
  4. Scrapen Sie Seiten und speichern Sie Filmobjektdaten in Dateien mit vollständigen Informationen.

Notepad-Fenster mit JSON-Filmdatenbank mit Filmtiteln, Beschreibungen, URLs und Genre-Metadaten

Weitere Informationen zu den verfügbaren Methoden und Eigenschaften finden Sie in der API-Referenz. IronWebScraper bietet ein robustes Framework für die Extraktion strukturierter Daten aus Websites und ist damit ein unverzichtbares Werkzeug für Datenerfassungs- und Analyseprojekte.

Häufig gestellte Fragen

Wie kann ich mit C# Filmtitel aus HTML extrahieren?

IronWebscraper bietet CSS-Selektor-Methoden, um Filmtitel aus HTML zu extrahieren. Verwenden Sie die response.Css()-Methode mit geeigneten Selektoren wie '.movie-item h2', um auf Titelelemente zu zielen, und greifen Sie dann auf die TextContentClean-Eigenschaft zu, um den sauberen Textwert zu erhalten.

Wie kann man am besten zwischen mehreren Filmseiten navigieren?

IronWebscraper verarbeitet die Seitennavigation über die Request()-Methode. Sie können Paginierungslinks mit CSS-Selektoren extrahieren und dann Request() mit jeder URL aufrufen, um Daten von mehreren Seiten zu scrapen und so automatisch umfassende Filmdatensätze zu erstellen.

Wie kann ich gescrapte Filmdaten in einem strukturierten Format speichern?

Verwenden Sie die Scrape()-Methode von IronWebscraper, um Daten im JSON-Format zu speichern. Erstellen Sie anonyme Objekte oder typisierte Klassen, die Filmeigenschaften wie Titel, URL und Bewertung enthalten, und übergeben Sie diese dann zusammen mit einem Dateinamen an Scrape(), um die Daten automatisch zu serialisieren und zu speichern.

Welche CSS-Selektoren sollte ich verwenden, um Filminformationen zu extrahieren?

IronWebScraper unterstützt Standard-CSS-Selektoren. Für Film-Websites sollten Selektoren wie '.movie-item' für Container, 'h2' für Titel, 'a[href]' für Links und spezifische Klassennamen für Bewertungen oder Genres verwendet werden. Die Methode Css() gibt Sammlungen zurück, durch die Sie iterieren können.

Wie gehe ich mit Filmqualitätsindikatoren wie "CAM" in gescrapten Daten um?

IronWebscraper ermöglicht es Ihnen, Qualitätsindikatoren zu extrahieren und zu verarbeiten, indem Sie deren spezifische HTML-Elemente anvisieren. Verwenden Sie CSS-Selektoren, um Qualitätsplaketten oder Text zu finden, und fügen Sie diese dann als Eigenschaften in Ihre gescrapten Datenobjekte ein, um umfassende Filminformationen zu erhalten.

Kann ich eine Protokollierung für meine Film-Scraping-Vorgänge einrichten?

Ja, IronWebscraper enthält eine integrierte Protokollierungsfunktion. Setzen Sie die Eigenschaft LoggingLevel in Ihrer Init()-Methode auf LogLevel.All, um alle Scraping-Aktivitäten, Fehler und den Fortschritt zu verfolgen, was bei der Fehlersuche und Überwachung Ihrer Filmdatenextraktion hilft.

Wie konfiguriert man Arbeitsverzeichnisse für gescrapte Daten richtig?

IronWebscraper lässt Sie eine WorkingDirectory-Eigenschaft in der Init()-Methode festlegen. Geben Sie einen Pfad wie 'C:\MovieData\Output\' an, in dem die gescrapten Filmdateien gespeichert werden sollen. Dies zentralisiert das Output-Management und hält Ihre Daten organisiert.

Wie erbe ich richtig von der WebScraper-Klasse?

Erstellen Sie eine neue Klasse, die von der WebScraper-Basisklasse von IronWebScraper erbt. Überschreiben Sie die Methode Init() für die Konfiguration und die Methode Parse() für die Datenextraktionslogik. Dieser objektorientierte Ansatz macht Ihren Movie Scraper wiederverwendbar und wartbar.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 128,072 | Version: 2025.12 gerade veröffentlicht