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!