Admin posted on August 6, 2009 10:12

Precisa fazer parsing de HTML em .Net? Experimente o HTML Agility Pack. Com ele você pode facilmente ler uma página HTML e acessar os seus elementos através de expressões XPath, ou então percorrer os nós da estrutura de árvore da página HTML. Vou mostrar aqui um exemplo prático, uma pequena aplicação Windows Forms que, dada uma URL, retorna todos os elementos a (links) existentes na página. Você pode alterar o programa para poder extrair conteúdo de sites, efetuar buscas, etc.

Acesse o site do HTML Agility Pack e faça o download do código fonte. Descompacte, abra o projeto no Visual Studio (2005 ou superior) e compile o projeto HtmlAgilityPack, que deverá gerar a dll com o mesmo nome na pasta bin do projeto. Com a dll criada, feche a solução atual (com o código do HTML Agility Pack) e crie um novo projeto Windows Application usando a linguagem C#. Adicione a referência para a dll do HTML Agility Pack, criada anteriormente. Adicione os seguintes controles no form:

  • TextBox, ID "txtUrl", onde será digitada a URL.
  • Button, ID "btnBusca", ao clicar esse botão, vai buscar a URL e processar.
  • ListBox, ID "lsbResultado", exibir os links encontrados na página.

 Agora, vamos para o código:

   1:  using System;
   2:  using HtmlAgilityPack;
   3:  using System.Windows.Forms;
   4:   
   5:  namespace PegaLinks
   6:  {
   7:      public partial class Form1 : Form
   8:      {
   9:          public Form1()
  10:          {
  11:              InitializeComponent();
  12:          }
  13:   
  14:          private void btnBusca_Click(object sender, EventArgs e)
  15:          {
  16:              try 
  17:              {
  18:                  HtmlWeb web = new HtmlWeb();
  19:                  // O método Load da classe HtmlWeb busca a página HTML e faz o parsing, atribuindo a
  20:                  // árvore do DOM (document object model) gerada ao objeto HtmlDocument
  21:                  HtmlAgilityPack.HtmlDocument doc = web.Load(@txtUrl.Text.Trim());
  22:                  
  23:                  // Aqui pegamos apenas o que interessa, os links (tags <a>), usando XPath
  24:                  HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("/html/body//a");
  25:                  if (nodes != null)
  26:                  {
  27:                      // Percorremos a coleção dos nós encontrados (elementos <a>) e pegamos apenas o 
  28:                      // atributo href e o inner text de cada nó.
  29:                      foreach (HtmlNode node in nodes)
  30:                      {
  31:                          HtmlAttribute att = node.Attributes["href"];
  32:                          // Colocamos cada elemento no ListBox
  33:                          lsbResultado.Items.Add(node.InnerText + "  (" + att.Value + ")");
  34:                      }
  35:                  }
  36:                  else
  37:                  {
  38:                      MessageBox.Show("Nenhum link encontrado");
  39:                  }
  40:              }
  41:              catch (Exception ex)
  42:              {
  43:                  MessageBox.Show(ex.Message);
  44:              }   
  45:          }
  46:      }
  47:  }

 

Com poucas linhas você tem o que precisa: a informação limpinha. Sem precisar mexer com complexas expressões regulares ou parsing manual de strings... Tudo rápido e fácil! Não se esqueça de associar o evento Click do botão com o método btnBusca_Click.


Posted in: C# , .Net  Tags: , , , ,
Admin posted on September 5, 2007 07:09
XPath consiste em um conjunto de regras para selecionar partes de um documento XML. Por exemplo, você pode obter os links (tags <a></a>) de uma página HTML usando apenas a expressão "/html/body//a", como visto no post anterior. Este é apenas um pequeno exemplo do que dá para fazer. Seguem alguns links para que você possa aprender mais sobre XPath:

Posted in: XML/XSLT/XPath  Tags: ,
Admin posted on August 31, 2007 12:08
Este tutorial mostra como fazer um script em PHP5 que analisa uma página HTML e obtém os links (tags <a></a>), armazenando-os em uma tabela no banco de dados. O legal é que ele usa DOM e XPath para obter as tags, sendo totalmente desnecessário o uso de expressões regulares, tornando o código muito mais simples e legível. Ao invés daquelas ERs enormes, algo como:

$hrefs = $xpath->evaluate("/html/body//a");

obtém todas as tags <a></a> da página, retornando um array. Simples, prático e rápido. ;)

Posted in: XML/XSLT/XPath , PHP  Tags: , ,

Páginas

Calendário

«  September 2010  »
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
View posts in large calendar