powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не правильно работает SelectSingleNode в HtmlAgilityPack (парсинг сайта)
5 сообщений из 5, страница 1 из 1
Не правильно работает SelectSingleNode в HtmlAgilityPack (парсинг сайта)
    #39281680
msleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Практикуюсь парсить сайты. Использую библиотеку HtmlAgilityPack. Для тестов взял сайт Avito.

И проблема в том, что когда я пытаюсь вытянуть ссылку на объявление
Код: c#
1.
Console.Write("Link item: " + desc.OwnerDocument.DocumentNode.SelectSingleNode("//h3[@class=\"title item-description-title\"]/a").Attributes["href"].Value + "\n");



Вытягивается почему то только первая ссылка на объявление, хотя я пробегаюсь в цикле по всем объявлениям! Где моя ошибка - весь код прикладываю снизу

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
namespace Парсинг_сайта
{
    class Program
    {
        static void Main(string[] args)
        {
            HtmlWeb client = new HtmlWeb();
            client.OverrideEncoding = Encoding.UTF8;

            //создаем экземпляр класса
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
           
            //загружаем страницу сайта
            doc=client.Load("https://www.avito.ru/moskva/garazhi_i_mashinomesta");

            
            HtmlNode dataBlock = doc.DocumentNode.SelectSingleNode("//div[@class=\"js-catalog_before-ads\"]"); //получаем в переменную все блоки из дива js-catalog_before-ads

            int kol =0; //для подсчета объявлений

            HtmlNodeCollection descriptions = dataBlock.SelectNodes("//div[@class=\"description\"]"); //получаем все описания объявлений

            if (descriptions != null)
            {
                foreach (HtmlNode desc in descriptions)
                {
                    Console.Write(desc.InnerText + "\n" + "-*-*-*-*-*-*-*-*-*-*-"); /*показываем в консоли содержимое дива*/
                  
                    //пытаюсь вытянуть ссылку на объявление!!! И показывают только одну ссылку!!!
                    Console.Write("Link item: " + desc.OwnerDocument.DocumentNode.SelectSingleNode("//h3[@class=\"title item-description-title\"]/a").Attributes["href"].Value + "\n");
                   
                    Console.WriteLine("-------------------------------------------------------------------------------" + "\n" + "\n");
                    kol++;
                }

                Console.WriteLine("-------------------------------------------------------------------------------" + "\n" + "\n");

            }
            
            Console.WriteLine(kol);

        }
}
}
...
Рейтинг: 0 / 0
Не правильно работает SelectSingleNode в HtmlAgilityPack (парсинг сайта)
    #39281682
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
namespace Парсинг_сайта
{

}



по-русски namespace писать сам придумал? :)
рыдал долго
...
Рейтинг: 0 / 0
Не правильно работает SelectSingleNode в HtmlAgilityPack (парсинг сайта)
    #39281691
msleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
monstrU,
Это никак на результат не влияет. Прошу писать только по делу
...
Рейтинг: 0 / 0
Не правильно работает SelectSingleNode в HtmlAgilityPack (парсинг сайта)
    #39281700
msleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел решение, может кому-нибудь поможет. Оказывается

Если использовать //, то поиск идет с начала документа,
а при .// поиск идет с текущего нода

и у меня заработал следующий вариант
Код: c#
1.
Console.Write("Link item: " + desc.SelectSingleNode(".//h3[@class='title item-description-title\']/a").Attributes["href"].Value)
...
Рейтинг: 0 / 0
Не правильно работает SelectSingleNode в HtmlAgilityPack (парсинг сайта)
    #39281721
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mslegmonstrU,
Это никак на результат не влияет. Прошу писать только по делу
может быть да, может быть нет.

был бы я разработчиком такой библиотеки, то у меня метод dataBlock.SelectNodes возвращал бы список отобранных узлов, а метод
desc.OwnerDocument.DocumentNode.SelectSingleNode возвращал бы только один узел.

почему ты ждешь, что метод SelectSingleNode вернет не одну ссылку, а много? он же single node. а вот уже select nodes вернет несколько.

в итоге на результат будет сильно влиять, используешь ты метод "ВыбратьЕдинственныйУзел" или "ВыбратьУзлы"
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не правильно работает SelectSingleNode в HtmlAgilityPack (парсинг сайта)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]