Extraindo dados de um site de filmes online usando C# e IronWebScraper

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

O IronWebScraper extrai dados de filmes de sites analisando elementos HTML, criando objetos tipados para armazenamento de dados estruturados e navegando entre páginas usando metadados para construir conjuntos de dados abrangentes com informações sobre filmes. Esta biblioteca C# Web Scraper simplifica a conversão de conteúdo web não estruturado em dados organizados e analisáveis.

Início Rápido: Extraindo Filmes em C#

  1. Instale o IronWebScraper através do Gerenciador de Pacotes NuGet.
  2. Crie uma classe que herde de WebScraper
  3. Substitua Init() para definir a licença e solicitar o URL de destino
  4. Substitua Parse() para extrair dados de filmes usando seletores CSS
  5. Use o método Scrape() para salvar dados em formato JSON
  1. Instale IronWebScraper com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronWebScraper
  2. Copie e execute este trecho de código.

    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. Implante para testar em seu ambiente de produção.

    Comece a usar IronWebScraper em seu projeto hoje com uma avaliação gratuita

    arrow pointer

Como faço para configurar uma classe de extração de dados de filmes?

Comece com um exemplo de um site do mundo real. Vamos extrair dados de um site de filmes usando as técnicas descritas em nosso tutorial de Webscraping em C# .

Adicione uma nova classe e nomeie-a MovieScraper:

A caixa de diálogo

Criar uma classe dedicada para extrair dados ajuda a organizar seu código e o torna reutilizável. Essa abordagem segue os princípios da orientação a objetos e permite que você estenda facilmente a funcionalidade posteriormente.

Qual é a estrutura do site de destino?

Analise a estrutura do site para extração de dados. Compreender a estrutura do site é crucial para uma extração de dados da web eficaz. Assim como em nosso guia sobre como extrair dados de um site de filmes online , analise primeiro a estrutura HTML:

Interface de um site de streaming de filmes exibindo uma grade de pôsteres de filmes com abas de navegação e indicadores de qualidade.

Quais elementos HTML contêm dados de filmes?

Esta é parte do HTML da página inicial que vemos no site. Examinar a estrutura do HTML ajuda a identificar os seletores CSS corretos a serem usados:

<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

Temos o ID do filme, o título e um link para uma página detalhada. Cada filme está contido em um elemento div com a classe ml-item e inclui um atributo data-movie-id único para identificação.

Como faço para implementar a extração básica de dados de filmes?

Comece a extrair dados deste conjunto de dados. Antes de executar qualquer programa de extração de dados, certifique-se de ter configurado corretamente sua chave de licença, conforme mostrado abaixo:

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

Para que serve a propriedade Working Directory?

O que há de novo neste código?

A propriedade "Diretório de Trabalho" define o diretório de trabalho principal para todos os dados coletados e arquivos relacionados. Isso garante que todos os arquivos de saída sejam organizados em um único local, facilitando o gerenciamento de projetos de extração de dados em larga escala. O diretório será criado automaticamente caso não exista.

Quando devo usar seletores CSS em vez de atributos?

Considerações adicionais:

Os seletores CSS são ideais para selecionar elementos por sua posição estrutural ou nomes de classe, enquanto o acesso direto aos atributos é melhor para extrair valores específicos, como IDs ou atributos de dados personalizados. Em nosso exemplo, usamos seletores CSS (#movie-featured > div) para navegar na estrutura DOM e atributos (data-movie-id) para extrair valores específicos.

Como faço para criar objetos tipados para dados extraídos?

Crie objetos tipados para armazenar dados extraídos em objetos formatados. O uso de objetos fortemente tipados proporciona melhor organização do código, suporte ao IntelliSense e verificação de tipos em tempo de compilação.

Implemente uma classe Movie que conterá dados formatados:

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

Como o uso de objetos tipados melhora a organização de dados?

Atualize o código para usar a classe Movie tipada em vez do dicionário genérico ScrapedData:

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

Qual formato o método de raspagem utiliza para objetos tipados?

O que há de novo?

  1. Implementamos uma classe Movie para manter os dados extraídos, proporcionando segurança de tipo e melhor organização do código.
  2. Passamos objetos de filmes para o método Scrape, que entende nosso formato e salva de maneira definida conforme mostrado abaixo:

Janela do Bloco de Notas exibindo um banco de dados JSON de filmes com dados estruturados, incluindo títulos, URLs e campos de metadados.

O resultado é automaticamente serializado para o formato JSON, facilitando a importação para bancos de dados ou outros aplicativos.

Como faço para extrair informações detalhadas de páginas de filmes?

Comece a extrair dados de páginas mais detalhadas. A extração de dados de várias páginas é um requisito comum, e o IronWebScraper a torna simples através de seu mecanismo de encadeamento de requisições.

Que dados adicionais posso extrair das páginas de detalhes?

A página do filme tem este aspecto e contém metadados detalhados sobre cada filme:

Página de informações do filme Guardiões da Galáxia Vol. 2 com pôster e detalhes do filme, incluindo elenco e classificação indicativa.

<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

Como devo expandir minha aula de cinema para incluir outras propriedades?

Estenda a classe Movie com novas propriedades (Description, Genre, Actor, Director, Country, Duration, IMDb Score) mas use apenas Description, Genre, e Actor para este exemplo. Usar List<string> para gêneros e atores permite lidar com múltiplos valores de forma elegante:

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

Como faço para navegar entre páginas durante a extração de dados?

Acesse a página detalhada para extrair os dados. O IronWebScraper lida com a segurança de threads automaticamente, permitindo que várias páginas sejam processadas simultaneamente.

Por que usar várias funções de análise sintática para diferentes tipos de página?

O IronWebScraper permite adicionar múltiplas funções de raspagem para lidar com diferentes formatos de página. Essa separação de responsabilidades torna seu código mais fácil de manter e permite o tratamento adequado de diferentes estruturas de página. Cada função de análise sintática pode se concentrar na extração de dados de um tipo de página específico.

Como os metadados ajudam a passar objetos entre funções de análise sintática?

O recurso de metadados é crucial para manter o estado entre as requisições. Para recursos mais avançados de web scraping , consulte nosso guia detalhado:

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

Quais são as principais características dessa abordagem de extração de dados em várias páginas?

O que há de novo?

  1. Adicione funções de extração (por exemplo, ParseDetails) para extrair páginas detalhadas, semelhante a técnicas usadas ao extrair de um site de compras.
  2. Mova a função Scrape, que gera arquivos, para a nova função, garantindo que os dados sejam salvos apenas após todos os detalhes serem coletados.
  3. Use o recurso IronWebScraper (MetaData) para passar objetos de filmes para novas funções de extração, mantendo o estado do objeto entre as solicitações.
  4. Extrair dados das páginas e salvar os objetos do filme em arquivos com informações completas.

Janela do Bloco de Notas exibindo um banco de dados JSON de filmes com títulos, descrições, URLs e metadados de gênero.

Para obter mais informações sobre os métodos e propriedades disponíveis, consulte a Referência da API . O IronWebScraper oferece uma estrutura robusta para extrair dados estruturados de sites, tornando-se uma ferramenta essencial para projetos de coleta e análise de dados.

Perguntas frequentes

Como extrair títulos de filmes de um arquivo HTML usando C#?

O IronWebScraper fornece métodos de seleção CSS para extrair títulos de filmes do HTML. Use o método `response.Css()` com seletores apropriados, como `.movie-item h2`, para selecionar os elementos do título e, em seguida, acesse a propriedade `TextContentClean` para obter o valor do texto limpo.

Qual a melhor maneira de navegar entre várias páginas de filmes?

O IronWebScraper gerencia a navegação entre páginas através do método Request(). Você pode extrair links de paginação usando seletores CSS e, em seguida, chamar Request() com cada URL para coletar dados de várias páginas, criando automaticamente conjuntos de dados abrangentes sobre filmes.

Como posso salvar dados de filmes extraídos em um formato estruturado?

Utilize o método `Scrape()` do `IronWebScraper` para salvar dados em formato JSON. Crie objetos anônimos ou classes tipadas contendo propriedades do filme, como título, URL e classificação, e passe-os para o `Scrape()` juntamente com um nome de arquivo para serializar e salvar os dados automaticamente.

Quais seletores CSS devo usar para extrair informações sobre filmes?

O IronWebScraper suporta seletores CSS padrão. Para sites de filmes, use seletores como '.movie-item' para contêineres, 'h2' para títulos, 'a[href]' para links e nomes de classe específicos para classificações ou gêneros. O método Css() retorna coleções que você pode iterar.

Como faço para lidar com indicadores de qualidade de filmes, como 'CAM', em dados extraídos?

O IronWebScraper permite extrair e processar indicadores de qualidade, selecionando elementos HTML específicos. Use seletores CSS para localizar selos ou textos de qualidade e, em seguida, inclua-os como propriedades nos seus objetos de dados extraídos para obter informações completas sobre filmes.

Posso configurar o registro de logs para minhas operações de extração de dados de filmes?

Sim, o IronWebScraper inclui funcionalidade de registro integrada. Defina a propriedade LoggingLevel como LogLevel.All no seu método Init() para rastrear todas as atividades de raspagem, erros e progresso, o que ajuda a depurar e monitorar a extração de dados do seu filme.

Qual a maneira correta de configurar os diretórios de trabalho para os dados extraídos?

O IronWebScraper permite definir uma propriedade WorkingDirectory no método Init(). Especifique um caminho como 'C:\MovieData\Output\' onde os arquivos de dados de filmes extraídos serão salvos. Isso centraliza o gerenciamento de saída e mantém seus dados organizados.

Como faço para herdar corretamente da classe WebScraper?

Crie uma nova classe que herde da classe base WebScraper do IronWebScraper. Sobrescreva o método Init() para configuração e o método Parse() para a lógica de extração de dados. Essa abordagem orientada a objetos torna seu scraper de filmes reutilizável e de fácil manutenção.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 131,175 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronWebScraper
executar um exemplo Observe como seu site alvo se transforma em dados estruturados.