Что ж, вы должны понимать XPATH, чтобы по-настоящему осваивать возможности очистки HTML-пакетов Agility Pack :-) Можно начать с Google примеров XPATH для начала.
Сосредоточив внимание на вопросе, касающемся скрининга, сложно выбрать то, что, по вашему мнению, является наиболее дискриминационным выражением xpath для информации, которую вы хотите получить.В большинстве случаев существует не только одно решение, и вы должны быть готовы обновить свой код, чтобы он соответствовал эволюции HTML целевого сайта.
Так что это компромисс между очень простыми выражениями с риском того, что онисопоставлять нежелательные тексты и слишком дискриминирующие выражения, не допускающие эволюции в очищенном HTML, с риском того, что они ничего не будут совпадать.
Что касается вашего конкретного текста, то это хороший пример из реальной жизни, и воткод, который делает это:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(yourText);
string companyName = doc.DocumentNode.SelectSingleNode("/td/table/tr/td/table/tr/th").InnerText;
Console.WriteLine("company name=" + companyName);
// another way
companyName = doc.DocumentNode.SelectSingleNode("//td[@class='black']/table/tr/th").InnerText;
Console.WriteLine("company name=" + companyName);
// a more advanced XPATH expression, means
// "Select a TD tag anywhere in the doc that has a preceding sibling of TD type with a B chid, with a FONT child with inner text starting with 'Phone Number'"
string phoneNumber = doc.DocumentNode.SelectSingleNode("//td[starts-with(preceding-sibling::td/b/font/text(), 'Phone Number')]").InnerText;
Console.WriteLine("phone Number=" + phoneNumber);
// same kind of story but go down the next A tag
string email = doc.DocumentNode.SelectSingleNode("//td[starts-with(preceding-sibling::td/b/font/text(), 'E-mail')]/a").InnerText;
Console.WriteLine("email=" + email);
PS : обратите внимание, что HTML-пакет Agility Pack всегда ожидает, что теги, используемые в выражениях XPATH, должны быть строчными, даже если их нет в исходном тексте HTML.
Как видите, название компании извлекается здесь с использованием двух разных выражений.Они оба работают с образцом, но первый не будет сопротивляться, если в середине будет добавлен новый тег.Второй более перспективен на будущее, но основан на теге класса CSS, который также может измениться.Это всегда компромисс.
Номер телефона и адрес электронной почты похожи, но показывают мощь XPATH.