La meilleure chose à utiliser est HTMLAgilityPack . Vous pouvez également envisager d'utiliser Fizzler o CSQuery en fonction de vos besoins pour sélectionner les éléments de la page récupérée. L'utilisation de LINQ ou d'expressions Regukar est trop sujette aux erreurs, en particulier lorsque le HTML peut être mal formé, qu'il manque des balises de fermeture, que des éléments enfants sont imbriqués, etc.
Vous devez transformer la page en un objet HtmlDocument, puis sélectionner l'élément requis.
// Call the page and get the generated HTML
var doc = new HtmlAgilityPack.HtmlDocument();
HtmlAgilityPack.HtmlNode.ElementsFlags["br"] = HtmlAgilityPack.HtmlElementFlag.Empty;
doc.OptionWriteEmptyNodes = true;
try
{
var webRequest = HttpWebRequest.Create(pageUrl);
Stream stream = webRequest.GetResponse().GetResponseStream();
doc.Load(stream);
stream.Close();
}
catch (System.UriFormatException uex)
{
Log.Fatal("There was an error in the format of the url: " + itemUrl, uex);
throw;
}
catch (System.Net.WebException wex)
{
Log.Fatal("There was an error connecting to the url: " + itemUrl, wex);
throw;
}
//get the div by id and then get the inner text
string testDivSelector = "//div[@id='test']";
var divString = doc.DocumentNode.SelectSingleNode(testDivSelector).InnerHtml.ToString();
[EDIT] En fait, laissez tomber. La méthode la plus simple est d'utiliser FizzlerEx Fizzler, une mise en œuvre actualisée des sélecteurs jQuery/CSS3 du projet original Fizzler.
Exemple de code provenant directement de leur site :
using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;
//get the page
var web = new HtmlWeb();
var document = web.Load("http://example.com/page.html");
var page = document.DocumentNode;
//loop through all div tags with item css class
foreach(var item in page.QuerySelectorAll("div.item"))
{
var title = item.QuerySelector("h3:not(.share)").InnerText;
var date = DateTime.Parse(item.QuerySelector("span:eq(2)").InnerText);
var description = item.QuerySelector("span:has(b)").InnerHtml;
}
Je ne pense pas que ça puisse être plus simple que ça.