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!
