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: , , , ,

Comments


December 16. 2009 23:21
cash loans
my God, i thought you were going to chip in with some decisive insght at the end there, not leave it with ‘we leave it to you to decide’.

http://www.flyingloans.com/http://www.flyingloans.com/


January 20. 2010 08:34
quick payday loans
As a Newbie, I am always searching online for articles that can help me. Thank you

http://www.globalpaydayloans.com/http://www.globalpaydayloans.com/


February 9. 2010 12:16
fast loans
Please, can you PM me and tell me few more thinks about this, I am really fan of your blog...

http://www.globalpaydayloans.com/http://www.globalpaydayloans.com/


February 25. 2010 10:01
paydayloans
Hi. I read a few of your other posts and i wanted to say thank you for the informative posts.

http://www.sonicloans.net/http://www.sonicloans.net/


February 25. 2010 15:25
payday loans
Of course, what a great site and informative posts, I will add backlink - bookmark this site? Regards, Reader.

http://www.sonicloans.net/http://www.sonicloans.net/

Páginas

Calendário

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