HtmlAgilityPack – результаты перепутаныC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 HtmlAgilityPack – результаты перепутаны

Сообщение Anonymous »

Итак, я хочу создать приложение, которое периодически получает HTML-код со страниц продажи продуктов, которые предоставляет пользователь.
Проблема в том, что я не знаю, как получить значения, чтобы они не получили перепутали.
На изображении видно, что заголовок объявления не соответствует URL-адресу (в заголовке указано iPhone 13, в URL-адресе указано iPhone 5s):
Изображение

Код: Выделить всё

var url = url_textbox.Text;
var web = new HtmlWeb();
var doc = web.Load(url);

var allTitles = doc.DocumentNode.SelectNodes("//*[@class='" + adTitleClassName + "']"); // exam: adTitleClassName = css-1wxaaza
var allPrices = doc.DocumentNode.SelectNodes("//*[@class='" + adPriceClassName + "']");
var allLinks = doc.DocumentNode.SelectNodes("//*[@class='" + adLinkClassName + "']");
var allDamaged = doc.DocumentNode.SelectNodes("//*[@class='" + adDamagedClassName + "']");
var allLocations = doc.DocumentNode.SelectNodes("//*[@class='" + adLocationClassName + "']");
var allImages = doc.DocumentNode.SelectNodes("//div[@class='css-gl6djm']");

for (int i = 0; i < allTitles.Count; i++)
{
var title = allTitles[i].InnerText;
var price = allPrices[i].InnerText;
var link = allLinks[i].Attributes["href"].Value;
var damaged = allDamaged[i].InnerText;
var timeAdded = allLocations[i].InnerText;
var imageUrl = allImages[i].SelectNodes("//img/@src")[i].Attributes["src"].Value;
var negotiate = false;

var damagedParsed = false;
if (damaged == "Uszkodzone") damagedParsed = true;

Ad ad = new Ad();
ad.Title = title;
ad.Price = double.Parse(price.Replace("do negocjacji", "").Replace(" zł", "").Replace(" ", ""));
ad.URL = "https://www.olx.pl" + link;
ad.Damaged = damagedParsed;
ad.TimeAdded = timeAdded;
ad.ImageURL = imageUrl;
ad.Negotiate = price.Contains("do negocjacji");

if (only_iphone_checkBox.Checked)
{
if (ad.Title.ToLower().Contains("iphone") ||
ad.Title.ToLower().Contains("apple")) ads.Add(ad);
} else
{
ads.Add(ad);
}
}

foreach (Ad ad in ads)
{
AdItem adItem = new AdItem(ad);
ads_list.Controls.Add(adItem);
}
Я думал, это потому, что он пытается получить всю информацию отдельно и упаковывает ее в разные списки, в результате чего информация путается.
Поэтому я попытался собрать информацию вместе, отдельно для каждой карточки с продаваемым товаром, который отображается на странице, с помощью этого кода:

Код: Выделить всё

var url = url_textbox.Text;
var web = new HtmlWeb();
var doc = web.Load(url);

var mainCard = doc.DocumentNode.SelectNodes("//div[@id='AdCardId']");
for (int i = 0; i < mainCard.Count; i++)
{
var title = mainCard[i].SelectSingleNode("//*[@class='" + adTitleClassName + "']").InnerText;
Print(title); // It prints always the same title
}
результат приведенного выше кода:
[img]https://i .sstatic.net/CL0acUrk.png[/img]

Итак, для меня это действительно не имеет смысла - почему метод SelectNodes на самом деле не «выбирает» в качестве имени метода говорит?
Я предполагаю, что

Код: Выделить всё

var title = mainCard[i].SelectSingleNode("//*[@class='" + adTitleClassName + "']").InnerText;
пытается найти имя adTitleClassName во всей HTML-странице, а не в выбранном мной узле, поэтому я получаю одно и то же название для каждого продукта.
Как я могу получить ТОЛЬКО узел с карточкой, представляющей AD, а не весь HTML?


Подробнее здесь: https://stackoverflow.com/questions/790 ... e-mixed-up
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • HtmlAgilityPack – результаты перепутаны
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • HtmlAgilityPack – результаты перепутаны
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как получить все варианты строк, в которых две соседние буквы перепутаны/поменяны местами
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Попытка получить определенный элемент из класса html с помощью HtmlAgilityPack
    Гость » » в форуме C#
    0 Ответы
    39 Просмотры
    Последнее сообщение Гость
  • HtmlAgilityPack — получение содержимого DIV
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»