Voltar ao blogue
Guias
Sorin-Gabriel MaricaLast updated on Apr 22, 20266 min read

Crie um web scraper com C# em apenas alguns minutos!

Crie um web scraper com C# em apenas alguns minutos!

A importância da recolha de informações é conhecida desde a antiguidade, e as pessoas que a utilizaram em seu benefício prosperaram.

Hoje em dia, podemos fazer isso de forma muito mais fácil e rápida utilizando uma ferramenta de scraping, e criar o seu próprio scraper também não é difícil. A capacidade de recolher leads mais rapidamente, acompanhar tanto a concorrência como a sua própria marca e aprender mais antes de investir em ideias está ao seu alcance.

A esta altura, talvez já saiba.

Se estiver interessado em saber mais sobre web scraping ou como criar a sua ferramenta em C#, não perca esta oportunidade!

Bem, é legal desde que o site que pretende scraper não se oponha a isso. Pode verificar isso adicionando “/robots.txt” ao endereço URL, como por exemplo http://httpbin.org/robots.txt, e lendo as permissões, ou consultando a secção dos Termos de Serviço.

O que é web scraping com C#?

O web scraping é uma técnica automatizada utilizada por empresas de todos os tamanhos para extrair dados para diversos fins, tais como a otimização de preços ou a recolha de e-mails. Os investigadores utilizam o web scraping para recolher relatórios de dados e estatísticas, e os programadores obtêm grandes quantidades de dados para a aprendizagem automática. 

Como funciona? Bem, para a maioria das ferramentas de web scraping, basta especificar o URL do site do qual pretende extrair dados. Dependendo das capacidades do scraper, este extrairá as informações dessa página web de forma estruturada, prontas para analisar e manipular da forma que desejar. 

Tenha em conta que alguns scrapers analisam apenas o conteúdo HTML de uma página para ver as informações de uma página web dinâmica. Neste caso, é necessária uma ferramenta de web scraping mais sofisticada para concluir o trabalho.

Utilizar um scraper é muito útil, pois pode reduzir o tempo que normalmente gastaria nesta tarefa. Copiar e colar dados manualmente não parece ser algo divertido de fazer repetidamente. Pense no tempo que seria necessário para obter grandes quantidades de dados para treinar uma IA! Se estiver interessado em saber mais sobre por que a extração de dados é útil, dê uma vista de olhos!  

Vamos ver como podemos criar a nossa ferramenta de web scraping em apenas alguns minutos.

Criar o seu próprio web scraper em C#

Para este tutorial, vou mostrar-lhe como se pode escrever um web scraper em C#. Sei que usar uma linguagem de programação diferente, como o Python, pode ser mais vantajoso para esta tarefa, mas isso não significa que seja impossível fazê-lo em C#. 

Programar em C# tem as suas vantagens, tais como:

  • É orientada a objetos;
  • Tem melhor integridade e interoperabilidade;
  • É multiplataforma;

1. Escolher a página que pretende extrair

Primeiro, tem de decidir qual a página web a extrair. Neste exemplo, irei extrair a página sobre a Grécia na Wikipédia e ver quais os tópicos apresentados no seu Índice. Este é um exemplo simples, mas pode adaptá-lo a outras páginas web também.

2. Inspecionar o código do site

Usando as ferramentas de desenvolvimento, pode inspecionar cada elemento para verificar em que tag se encontra a informação de que necessita. Basta clicar com o botão direito do rato na página web e selecionar «Inspecionar», e aparecerá uma «Caixa de Inspecção do Navegador».

Pode procurar a classe diretamente na secção de elementos ou utilizando a ferramenta de inspeção na página web, conforme mostrado abaixo.

Assim, descobriu que os dados de que necessita estão localizados dentro da tag span que tem a classe toctext. O que vai fazer a seguir é extrair todo o HTML da página, analisá-lo e selecionar apenas os dados dentro dessa classe específica. Vamos primeiro fazer alguns preparativos rápidos!

3. Preparar o espaço de trabalho

Pode usar qualquer IDE com que se sinta confortável. Neste exemplo, vou usar o Visual Studio Code. Também terá de instalar o .NET SDK.

Agora precisa de criar o seu projeto. Para tal, obviamente tem de abrir o Visual Studio Code. Em seguida, aceda ao menu de extensões e instale o C# para o Visual Studio Code.

Precisa de um local para escrever e executar o nosso código. Na barra de menus, selecione Ficheiro > Abrir Ficheiro (Ficheiro > Abrir… no macOS) e, na caixa de diálogo, crie uma pasta que servirá como nosso espaço de trabalho.

Depois de criar o espaço de trabalho, pode criar um modelo de aplicação simples “Hello World” introduzindo o seguinte comando no terminal dos nossos projetos:

dotnet new console

O seu novo projeto deverá ter este aspeto:

Em seguida, precisa de instalar estes dois pacotes:

  • O HtmlAgilityPack é um analisador HTML escrito em C# para ler/escrever DOM.
  • O CsvHelper é um pacote utilizado para ler e escrever ficheiros CSV.

Pode instalá-los utilizando estas linhas de comando no terminal dos seus projetos:

dotnet add package csvhelper
dotnet add package htmlagilitypack

4. Escrever o código

Vamos importar os pacotes que instalámos há alguns minutos, bem como alguns outros pacotes úteis para utilização posterior:

using CsvHelper;
using HtmlAgilityPack;
using System.IO;
using System.Collections.Generic;
using System.Globalization;

Fora da nossa função Main, irá criar uma classe pública para os títulos do seu índice.

public class Row
{
    public string Title {get; set;}
}

Agora, voltando à função Main, precisa de carregar a página que deseja extrair. Como mencionei anteriormente, vamos ver o que a Wikipédia escreve sobre a Grécia!

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://en.wikipedia.org/wiki/Greece");

O nosso próximo passo é analisar e selecionar os nós que contêm a informação que procura, localizada nas tags span com a classe toctext.

varHeaderNames = doc.DocumentNode.SelectNodes("//span[@class='toctext']");

O que deve fazer com esta informação agora? Vamos guardá-la num ficheiro .csv para uso posterior. Para isso, primeiro precisa de percorrer cada nó que extraímos anteriormente e guardar o seu texto numa lista.

O CsvHelper fará o resto do trabalho, criando e gravando as informações extraídas num ficheiro.

var titles = new List<Row>();
foreach (var item in HeaderNames)
{
    titles.Add(new Row { Title = item.InnerText});
}
 
using (var writer = new StreamWriter("your_path_here/example.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(titles);
}

5. Executar o código

O código está pronto e agora só temos de o executar! Utilize esta linha de comando no terminal. Certifique-se de que guardou o seu ficheiro primeiro!

dotnet run

Está feito!

Espero que este artigo o tenha ajudado a compreender melhor os conceitos básicos do web scraping utilizando C#.

É muito útil ter o seu próprio scraper, mas tenha em mente que só pode fazer web scraping numa página de cada vez e ainda tem de selecionar manualmente as tags dentro do código HTML do site.

Se quiseres fazer scraping de várias outras páginas, será muito mais rápido usar um scraper do que selecionar as informações manualmente, sim, mas nem todos os sites podem ser scraped usando este método. Alguns sites são dinâmicos, e este exemplo não extrairá todos os seus dados.

Já pensou em utilizar uma ferramenta pré-criada e mais avançada para o ajudar a extrair dados em massa? 

Que tal ver o que uma API pode fazer por si? Aqui está um guia escrito pela WebScrapingAPI para o ajudar a escolher uma API que possa adequar-se às suas necessidades.

Até à próxima!

Sobre o autor
Sorin-Gabriel Marica, Desenvolvedor Full-Stack @ WebScrapingAPI
Sorin-Gabriel MaricaDesenvolvedor Full-Stack

Sorin Marica é engenheiro Full Stack e DevOps na WebScrapingAPI, onde desenvolve funcionalidades do produto e mantém a infraestrutura que garante o bom funcionamento da plataforma.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.