Выборка через HTML Agility Pack - C#
Формулировка задачи:
Решил поработать с HTML Agility Pack, но порой складывается ощущение, что он чудит. Например есть следующий html-кусок:
Мне нужно взять просто текст между ссылками, т.е. www.somesite.ru (сайт выдуманный). Написал следующий код:
Он мне один раз выдал название (www.somesite.ru), а потом перестал. Подозреваю, что библиотека может некорректно работать или в чем еще может быть причина? Заранее спасибо за ответ
<a class="link link_redir_yes serp-vacancy__source stat__click i-bem link_js_inited" data-bem="{"link":{"signedUrl":"http://rabota-click2.yandex.ru/jsredir?state=UOgM_4YpfbEgYg81k5zwr9mGMjhv9AoDGkmQY4HED_m9c9X21afq25NmTOdiRxLYOW_d3TQaV-qg9x3fzyOKO1yLRl8L1qwtyfGglA39nRxerIVej-dqI245a75I6MbD6EjJ10VUkCaWUg4DRGx91jideQF9G68-rJAPcSj3VQC0mpB6yX7kJGdaMIqik0OmD1cskE_pIGt4lC-psHvFaW-xKv1tr8-sR7-NuCbuNlX9DB4rskVQu0Wz1NCBQ8Ghq6II2jc9hJx3BVxHp43PeqOnRZ7-ymKcjffoYpganbZjuGR_2hZkJrQfm6sgh_yqoOO6NfUnvyGZACVpjSzCFku-gBFPmJnTY53xgxV3RZF7BUyvJ7-rUTKjv0-L_3hFoqQnvfZrHH2tQkVOynq65A& data=eE03aEhZNGduWC1aR1BqRE9uSW1PZS1oRTc1OHg5Y3FLUy1BQVd2bzhVSTlUNDVud3hyT0hZbUhEMEZGVzhFMDF3ZHhvM2s3U1NlcXo0YWhTVGtGYjdOckJLWE5VMFRrcE9ybEZidjVmNXNJWEFERS1hMXYyclVCZW5WbHlVNFpOMkdKMmlqS1NGTTZtaWtKcXJaS0d0MUhTU29oZjRWYVZzOWpLaGJNaG5MMWI0a1pXM3hOeEhKc1BnMVp4MkhGQl9Ecm5CRWJ3REEwQVdSSmxCT3pTX2o1eUN1RGY4UHNEOEw3MmdPbF9EWWFqajVoZmhGc1lSQUZyUkJzZmpmT2k2VDVJMVA4U3BweHRvcEMzSUhzYjltSlRIY25Md2dOVTVPMTRCemFkcG0tYkVKTzVNcF94ZHRRNlNxQ0hSbTJrajVjZDNMXzlPTlE2WFBZdkxmbGNqSGdqOVRSckdYSA& b64e=2&sign=67fc6608c7e2abbfc3d8dfa294df7078&keyno=3&text=&from=rabota& ref=TvdTK396TXs32EaBqW95U6vZLXqH-p6yJn4ejhqq90Fg7QfD5TFWucM1ApFnt4qiTSGXpjeUrHc"}}" target="_blank" href="http://rabota-click2.yandex.ru/jsredir?state=UOgM_4YpfbEgYg81k5zwr9mGMjhv9AoDGkmQY4HED_m9c9X21afq25NmTOdiRxLYOW_d3TQaV-qg9x3fzyOKO1yLRl8L1qwtyfGglA39nRxerIVej-dqI245a75I6MbD6EjJ10VUkCaWUg4DRGx91jideQF9G68-rJAPcSj3VQC0mpB6yX7kJGdaMIqik0OmD1cskE_pIGt4lC-psHvFaW-xKv1tr8-sR7-NuCbuNlX9DB4rskVQu0Wz1NCBQ8Ghq6II2jc9hJx3BVxHp43PeqOnRZ7-ymKcjffoYpganbZjuGR_2hZkJrQfm6sgh_yqoOO6NfUnvyGZACVpjSzCFku-gBFPmJnTY53xgxV3RZF7BUyvJ7-rUTKjv0-L_3hFoqQnvfZrHH2tQkVOynq65A& data=eE03aEhZNGduWC1aR1BqRE9uSW1PZS1oRTc1OHg5Y3FLUy1BQVd2bzhVSTlUNDVud3hyT0hZbUhEMEZGVzhFMDF3ZHhvM2s3U1NlcXo0YWhTVGtGYjdOckJLWE5VMFRrcE9ybEZidjVmNXNJWEFERS1hMXYyclVCZW5WbHlVNFpOMkdKMmlqS1NGTTZtaWtKcXJaS0d0MUhTU29oZjRWYVZzOWpLaGJNaG5MMWI0a1pXM3hOeEhKc1BnMVp4MkhGQl9Ecm5CRWJ3REEwQVdSSmxCT3pTX2o1eUN1RGY4UHNEOEw3MmdPbF9EWWFqajVoZmhGc1lSQUZyUkJzZmpmT2k2VDVJMVA4U3BweHRvcEMzSUhzYjltSlRIY25Md2dOVTVPMTRCemFkcG0tYkVKTzVNcF94ZHRRNlNxQ0hSbTJrajVjZDNMXzlPTlE2WFBZdkxmbGNqSGdqOVRSckdYSA& b64e=2&sign=67fc6608c7e2abbfc3d8dfa294df7078&keyno=3&text=&from=rabota& ref=TvdTK396TXs32EaBqW95U6vZLXqH-p6yJn4ejhqq90Fg7QfD5TFWucM1ApFnt4qiTSGXpjeUrHc">www.somesite.ru</a>
var divs = document.DocumentNode.Descendants() .Where(x => x.Name == "a" && x.Attributes.Contains("class") && x.Attributes["class"].Value.Split() .Contains("serp-vacancy__source"));
Решение задачи: «Выборка через HTML Agility Pack»
textual
Листинг программы
using System; using System.Threading.Tasks; using System.Net.Http; using HtmlAgilityPack; namespace NameAndPrice { class Program { static void Main(string[] args) { Console.WriteLine("Please wait...\n"); ShowPrices().Wait(); Console.WriteLine("Done"); // Delay Console.ReadKey(); } private static async Task ShowPrices() { using (var client = new HttpClient()) { string html = await client.GetStringAsync("http://dila.ua/pricelist/"); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(html); try { HtmlNodeCollection nodes = htmlDoc.DocumentNode.SelectSingleNode("//div[@id='4_2']").SelectSingleNode("//table//tbody").ChildNodes; foreach (var tr in nodes) { var tds = tr.ChildNodes; if (tds.Count == 4) { Console.WriteLine("Название: {0}", tds[0].InnerText); Console.WriteLine("Цена: {0}", tds[1].InnerText); } Console.WriteLine(""); } //Console.WriteLine(htmlDoc.DocumentNode.SelectSingleNode("//div[@id='4_2']").ChildNodes.Select(x => x.Name).Aggregate((a, b) => a + ", " + b)); } catch (Exception ex) { Console.WriteLine(ex.Message); return; } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д