Выборка через 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;
}
}
}
}
}