Как я могу получить одно изображение с веб-сайта с помощью HtmlAgilityPack?

#c# #html #web-scraping #html-agility-pack

Вопрос:

Я пытаюсь очистить магазин с помощью HtmlAgilityPack, у меня есть название продукта, цена, акции, но мне не хватает изображения. Я искал, как получить изображения с помощью пакета Agility Pack, но все, что я нашел, — это как получить все изображения с веб-сайта, а не только одно. Я попытался выбрать один узел, в котором находится изображение, сделав что-то вроде этого: var imgNode = doc.DocumentNode.SelectSingleNode("//div[@class = 'featured']"); при этом значение imgNode равно всему html-элементу img id, но я хочу получить только текущий источник из значения src. Ссылка из магазина, которую я пытаюсь наскрести, такова: «https://www.fullh4rd.com.ar/prod/18381/monitor-27-gigabyte-g27fc-gaming-curvo-ips-165hz-hdmi-dp» Спасибо, что уделили мне время ^^

Ответ №1:

src Элемент в html-элементе, если рассматривать его просто как атрибут, может быть получен с помощью его свойства attributes.

Однако приведенный выше код выбирает div, поэтому, как только вы выберете дочерний img элемент, вы сможете получить доступ к его источнику:

 var imgContainer = document.DocumentNode.SelectSingleNode("//div[@class = 'featured']");

var imgNode = imgContainer.SelectSingleNode("//img");

var src = imgNode.Attributes["src"].Value;
 

В качестве альтернативы найдите img его напрямую, используя идентификатор:

 var imgContainer = document.DocumentNode.SelectSingleNode("//img[@id = 'mainpic']");
Console.WriteLine(imgContainer.Attributes["src"].Value);
 

Комментарии:

1. Я получаю ноль из этого метода. Я также думал о разделении идентификатора, делая что-то вроде создания node.innerText и разделения идентификаторов, чтобы получить только строку src, но проблема в том, что я не могу получить значение img со строкой.

2. Правка сделана — я только сейчас увидел, что вы выбираете div.

3. Ваше решение было самым точным, которое я нашел, но я не знаю, почему src равен странному изображению на facebook размером 1 пиксель, есть ли способ попытаться выполнить поиск img по его идентификатору? В этом случае идентификатор называется mainpic.

4. Еще одно внесенное изменение — похоже, вам нужно прикрепить базовый URL-адрес к выводу этого кода.

5. Это решило проблему, также для поиска по URL-адресу изображения я добавил ссылку на веб-сайт, так что, например, с этой ссылкой это было fullh4rd.com.ar//img/productos/Pics_Prod/… большое вам спасибо за потраченное время.