Выборка через 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;
- }
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д