Проблема в том, что я не знаю, как получить значения, чтобы они не получили перепутали.
На изображении видно, что заголовок объявления не соответствует 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;
Как я могу получить ТОЛЬКО узел с карточкой, представляющей AD, а не весь HTML?
Подробнее здесь: https://stackoverflow.com/questions/790 ... e-mixed-up