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