Iniciando com o parser Html Agility Pack

0

Html Agility Pack é um parser HTML que constrói uma leitura a partir dos dados do DOM e suporta XPATH simples ou XSLT. É uma biblioteca de código .NET que permite analisar “out of the Web” arquivos HTML. O analisador é muito tolerante com o ” mundo real ” HTML malformado. O modelo de objeto é muito semelhante ao que propõe System.Xml por isto sua busca se torna tão simples.

Primeiro faça o download do mesmo ou via nuget também.

Bom, então, vamos ao código:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

// Existem várias opções, utilize o que lhe ajuda mais, porém pode deixar o mais padrão possível.
htmlDoc.OptionFixNestedTags=true;

// arquivo em html
htmlDoc.Load(filePath);

// Utilize:  htmlDoc.LoadHtml(xmlString);   para carregar uma string

// Verifica se existe erros
if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
{
    // Lidar com erros

}
else
{

    if (htmlDoc.DocumentNode != null)
    {
    // Realiza a logica do parse
        HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

        if (bodyNode != null)
        {
            // Realiza a logica do parse
        }
    }
}

 

Veja um código de utilização simples:

/* -- Considerando este HTML
<h2>
  <a href="">Jack</a>
</h2>
<ul>
  <li class="tel">
    <a href="">81 75 53 60</a>
  </li>
</ul>
<h2>
  <a href="">Roy</a>
</h2>
<ul>
  <li class="tel">
    <a href="">44 52 16 87</a>
  </li>
</ul>
*/

//Utilização

string url = "http://website.com";
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h2//a"))
{
  names.Add(node.ChildNodes[0].InnerHtml);
}
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//li[@class='tel']//a"))
{
  phones.Add(node.ChildNodes[0].InnerHtml);
}

 

Viu só como é simples?

Um grande abraço a todos!

Compartilhe.