Web Scraping é uma técnica usada para extrair dados de sites. Ajuda a automatizar o processo de extração de dados de sites e arquivos HTML. Como desenvolvedor C#, podemos facilmente inspecionar, capturar e extrair dados, como imagens, vídeo, áudio, etc., das páginas da web. Neste artigo, aprenderemos como fazer web scraping com análise de HTML usando C#.
Os seguintes tópicos serão abordados neste artigo:
- API C# Web Scraping
- Ler e extrair HTML usando C#
- Inspecionar elementos do documento usando C#
- Localizar elemento específico usando filtros em C#
- Consultar dados de HTML usando C#
- Extrair usando o seletor CSS em C #
API C# Web Scraping
Para web scraping de arquivos HTML ou URLs, usaremos a API Aspose.HTML for .NET. É uma API avançada de processamento de HTML que permite gerar, modificar, extrair dados, converter e renderizar documentos HTML sem nenhum software externo. Por favor, baixe a DLL da API ou instale-a usando NuGet.
PM> Install-Package Aspose.Html
Ler e extrair HTML usando C#
Podemos ler e extrair HTML de qualquer documento HTML seguindo os passos abaixo:
- Carregue um documento HTML usando a classe HTMLDocument.
- Exiba o HTML interno do arquivo no console.
O exemplo de código a seguir mostra como ler e extrair conteúdo HTML usando C#.
// Este exemplo de código demonstra como mostrar o conteúdo do documento HTML
// Carregar documento HTML
var document = new HTMLDocument(@"D:\Files\html\input.html");
// Mostrar HTML interno do documento
Console.WriteLine(document.Body.InnerHTML);
Da mesma forma, podemos ler e extrair HTML de sites ativos, conforme mostrado abaixo:
// Este exemplo de código demonstra como mostrar o conteúdo do URL do site ativo.
// Inicializar URL
Url url = new Url("https://en.wikipedia.org/wiki/HTML");
// Carregar arquivo HTML usando a instância de URL
HTMLDocument document = new HTMLDocument(url);
// Mostrar HTML interno do arquivo para console
Console.WriteLine(document.Body.InnerHTML);
Inspecionar elementos do documento usando C#
Podemos inspecionar o documento e seus elementos seguindo as etapas abaixo:
- Carregue um documento HTML usando a classe HTMLDocument.
- Obtenha o elemento HTML do documento.
- Obtenha os primeiros/últimos elementos do elemento HTML.
- Exiba detalhes do elemento, como TagName, TextContent.
O exemplo de código a seguir mostra como inspecionar os elementos do documento usando C#.
// Este exemplo de código demonstra como inspecionar elementos HTML.
// Carregar um documento de um arquivo
string documentPath = @"D:\Files\html\input.html";
HTMLDocument document = new HTMLDocument(documentPath);
// Obter o elemento html do documento
var element = document.DocumentElement;
Console.WriteLine(element.TagName); // HTML
// Obter o último elemento do elemento html
element = element.LastElementChild;
Console.WriteLine(element.TagName); // BODY
// Obter o primeiro elemento do elemento body
element = element.FirstElementChild;
Console.WriteLine(element.TagName); // H1
Console.WriteLine(element.TextContent); // Header 1
Localizar elemento específico usando filtros em C#
Podemos usar filtros personalizados para encontrar um elemento específico, como obter todas as imagens, links, etc. Para isso, a API fornece a interface TreeWalker. Permite navegar em uma árvore ou subárvore de documento usando a visualização do documento definida por seus sinalizadores whatToShow e filtro (se houver). Podemos encontrar elementos específicos usando filtros seguindo as etapas abaixo:
- Defina filtros usando a classe NodeFilter e substitua o método AcceptNode().
- Carregue um documento HTML usando a classe HTMLDocument.
- Chame o método CreateTreeWalker(). Leva o nó raiz, o que mostrar e o NodeFilter como argumentos.
O exemplo de código a seguir mostra como localizar elementos específicos usando C#.
// Este exemplo de código demonstra como consultar dados usando filtros.
// Carregar um documento HTML
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");
// Para iniciar a navegação HTML, precisamos criar uma instância do TreeWalker.
// Os parâmetros especificados significam que ele começa a andar a partir da raiz do documento,
// iterar todos os nós e usar nossa implementação personalizada do filtro
using (var iterator = document.CreateTreeWalker(document, Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
while (iterator.NextNode() != null)
{
// Como estamos usando nosso próprio filtro, o nó atual sempre será uma instância do HTMLImageElement.
// Portanto, não precisamos das validações adicionais aqui.
var image = (HTMLImageElement)iterator.CurrentNode;
System.Console.WriteLine(image.Src);
// saída: imagem1.png
// saída: image2.png
}
}
// Este exemplo de código demonstra como definir o filtro Node.
class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
public override short AcceptNode(Aspose.Html.Dom.Node n)
{
// O filtro atual ignora todos os elementos, exceto os elementos IMG.
return string.Equals("img", n.LocalName)
? FILTER_ACCEPT
: FILTER_SKIP;
}
}
Consultar dados de HTML usando C#
Também podemos usar XPath Query para consultar dados de um documento HTML seguindo as etapas abaixo:
- Carregue um documento HTML usando a classe HTMLDocument.
- Chame o método Avaliar(). Ele recebe string de expressão XPath, documento e tipo como argumentos.
- Por fim, percorra os nós resultantes e exiba o texto
O exemplo de código a seguir mostra como consultar dados com consultas XPath usando C#.
// Este exemplo de código demonstra como consultar dados usando a consulta XPath.
// Preparar um código HTML
var code = @"
<div class='happy'>
<div>
<span>Hello!</span>
</div>
</div>
<p class='happy'>
<span>World</span>
</p>
";
// Inicializar um documento com base no código preparado
HTMLDocument document = new HTMLDocument(code, ".");
// Aqui avaliamos a expressão XPath onde selecionamos todos os elementos SPAN filhos
// de elementos cujo atributo 'class' é igual a 'happy':
var result = document.Evaluate("//*[@class='happy']//span",
document,
null,
Aspose.Html.Dom.XPath.XPathResultType.Any,
null);
// Iterar sobre os nós resultantes
for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
{
System.Console.WriteLine(node.TextContent);
// saída: Olá
// saída: Mundo!
}
Extrair usando o seletor CSS em C
Também podemos extrair conteúdo HTML usando seletores CSS. Para isso, a API disponibiliza o método QuerySelectorAll() que permite navegar por um documento HTML e pesquisar os elementos necessários. Ele usa o seletor de consulta como parâmetro e retorna uma NodeList correspondente de todos os elementos. Podemos consultar usando seletores CSS seguindo as etapas abaixo:
- Carregue um documento HTML usando a classe HTMLDocument.
- Chame o método QuerySelectorAll(). Ele usa o seletor de consulta como um argumento.
- Por fim, percorra a lista de elementos resultante.
O exemplo de código a seguir mostra como extrair conteúdo HTML usando seletores CSS em C#.
// Inicializar um documento com base no código preparado
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");
// Aqui criamos um seletor CSS que extrai todos os elementos div
var elements = document.QuerySelectorAll("div");
// Iterar sobre a lista de elementos resultante
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
}
Obtenha uma licença gratuita
Experimente a API sem limitações de avaliação solicitando uma licença temporária gratuita.
Conclusão
Neste artigo, aprendemos como:
- leia e extraia o conteúdo de um documento HTML usando C#;
- inspecionar os elementos do documento e encontrar um elemento específico do HTML;
- dados específicos de consulta e extraia dados usando o CSS Selector.
Além disso, você pode aprender mais sobre Aspose.HTML para .NET API usando a documentação. Em caso de qualquer ambiguidade, não hesite em contactar-nos no fórum.