Найкраще використовувати HTMLAgilityPack . Ви також можете вивчити використання Fizzler або CSQuery залежно від ваших потреб у виборі елементів із отриманої сторінки. Використання LINQ або Regukar Expressions призводить лише до помилок, особливо коли HTML може бути неправильно сформований, відсутні теги закриття, вкладені дочірні елементи тощо
Вам потрібно передати сторінку в об’єкт HtmlDocument, а потім вибрати потрібний елемент.
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;
}
string testDivSelector = "//div[@id='test']";
var divString = doc.DocumentNode.SelectSingleNode(testDivSelector).InnerHtml.ToString();
[РЕДАКТУВАТИ] Насправді, відкиньте це. Найпростіший метод - використовувати FizzlerEx , оновлену реалізацію jQuery / CSS3-селекторів оригінального проекту Fizzler.
Зразок коду безпосередньо з їх сайту:
using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;
var web = new HtmlWeb();
var document = web.Load("http://example.com/page.html");
var page = document.DocumentNode;
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;
}
Я не думаю, що це може стати простішим.
Contains
дзвінок може бути "достатньо хорошим".