0

Мне нужно спарсить изображения определенного класса со страницы и разместить их в WinForms.

Хочу для начала получить список адресов изображений, чтобы затем их добавить.

С AngleSharp не получилось, не помню почему - возможно причина та же самая. Запутался.

Пробую с HtmlAgilityPack. Если делаю doc.DocumentNode.SelectNodes("//img"); - он ищет совсем мало картинок. И есть такое ощущение, что это те картинки, которые находятся непросредственно в коде страницы. Как если бы смотреть ее исходник, а не открывать панель разработчика.

А картинки, которые нужны - имеют класс и висят примерно в ...>div>div>div>a>var>img. - таких структурах.

Нагуглил, что вроде как для моих целей надо открывать StreamReader, закачивать себе страницу и потом ее парсить.

Верно ли это? Какая библиотека лучше с этим справится?

p.s. Я пробовал искать с классом и не находил ничего, поэтому попробовал вообще все картинки найти.

Вот код, которым проверяю:

    var web = new HtmlWeb();
    var doc = web.Load(url);
    var imgs = doc.DocumentNode.SelectNodes("//img[@class=\"postImg\"]");

    if (imgs == null) {
        Console.WriteLine("Массив пустой.");
        Console.ReadLine();
        return; }
keltkelt
  • 465
  • 2
  • 1
    xpathhelper - расширение для хрома. Откройте сайт, запустите расширение и тестируйте там свои запросы. Если бы показали страницу, с которой надо парсить, можно было бы сказать точнее. Вполне может быть, что ваши изображения подгружаются не сразу, поэтому вы их и не видите все. – FaNaT_96 Jun 29 '19 at 12:00
  • @АндрейФедоров Спасибо. Вот, к примеру с рутрекера страничка. http://rutracker.net/forum/viewtopic.php?t=381935 Там последняя фотка под спойлером, кот на дереве. Перед включением проги конечно vpn включаю, ибо блок. Расширение находит по //img[@class="postImg"] этот элемент, а программа - нет. Добавил код в вопрос. – keltkelt Jun 29 '19 at 13:39
  • 1
    @keltkelt попробуйте //var[@class='postImg'] – FaNaT_96 Jun 29 '19 at 13:43
  • @АндрейФедоров Спасибо, первый рубеж прошло... 1) А как это вы сделали? 2) Теперь пытаюсь получить ссылку arrayItem.Attributes["src"].Value - выкидывает ошибку NullReferenceException. – keltkelt Jun 29 '19 at 13:58
  • 1
    @keltkelt Нужно смотреть html-код, который вы загружаете в HAP. Потому как в браузере иногда элементы иначе отображаются, нежели там. Со списком лучше работать вот так: foreach (var i in arrayItem) { MessageBox.Show(i.GetAttributeValue("src", ""));} Это, конечно, при условии, что он у вас не пустой – FaNaT_96 Jun 29 '19 at 14:34
  • В url адрес той страницы, которую я написал. Вы же этот код имели в виду? – keltkelt Jun 29 '19 at 14:39
  • @АндрейФедоров Последний вопрос) Нужно ли один раз сделать new HtmlWeb(), и потом его использовать для всех web.Load страниц, в Task итд? Или для каждой задачи надо это код прописывать и вызывать его отдельно? – keltkelt Jun 29 '19 at 22:46

0 Answers0