Скремблируйте динамические данные с веб-сайта с помощью C # HTMLAGILITYPACK

c# html-agility-pack web-scraping

Вопрос

Я очищаю данные с помощью пакета HTMLAGILITY, но страница не загружается должным образом.

Мне нужно, чтобы мой код должен был дождаться загрузки страницы.

Существует какая-то работа, чтобы использовать браузер в форме, но мне не нужно использовать его в форме.

Вот ссылка, которую мне нужно переделать, а следующий - мой код.

HtmlWeb web = new HtmlWeb();
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        HtmlAgilityPack.HtmlDocument doc = web.Load(website);
         var goldTypes = doc.DocumentNode.SelectNodes("//h2[@class='gold-box-title']").ToList();
       var goldPrices = doc.DocumentNode.SelectNodes("//span[@class='gold-box-price--sale'").ToList();

          for (int i = 0; i < 2; i++)
             {
               string  goldPrice = goldPrices[i].InnerText;
               string  goldType = goldTypes[i].InnerText;

             }

Принятый ответ

Вы были правы, все данные доступны в структурированном json в атрибуте «: buyable» элементов «buyable-gold».

Я сделал быстрый тест, и это должно быть то, что вы хотите. Это даст вам список структурированных объектов с необходимыми данными.

HtmlWeb web = new HtmlWeb();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
HtmlAgilityPack.HtmlDocument doc = web.Load("https://www.ezrsgold.com/buy-runescape-gold");

var buyGoldNodes = doc.DocumentNode.SelectNodes("//buyable-gold");

var buyableJsonList = buyGoldNodes.Select(x => HttpUtility.HtmlDecode(x.Attributes[":buyable"].Value)).ToList();

var buyables = buyableJsons.Select(x => JsonConvert.DeserializeObject<Buyable>(x)).ToList();

Тогда ваш класс Buyable будет выглядеть примерно так.

public class Buyable
{
    public int id { get; set; }
    public string sku { get; set; }
    public int game_id { get; set; }
    public string title { get; set; }
    public int min_qty { get; set; }
    public int max_qty { get; set; }
    public string base_price { get; set; }
    public string sale_price { get; set; }
    public Bulk_Price[] bulk_price { get; set; }
    public string delivery_time { get; set; }
    public string description { get; set; }
    public object sort_order { get; set; }
    public string created_at { get; set; }
    public string updated_at { get; set; }
    public string price { get; set; }
    public bool on_sale { get; set; }
    public int discount_from { get; set; }
}

public class Bulk_Price
{
    public string qty { get; set; }
    public string price { get; set; }
}


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему