Задать вопрос
@nikifovadim
Software Engineer

How to solve problem with Encoding while I'm doing web scrapping from Сoinmarketcap?

Делаю web scrapping c Сoinmarketcap. Хотел прочитать информаци по криптовалюте Solana и UnitTest не проходит тк не получается взять текст из HTML тега и прочитать слово Solana Price потому-что у меня весь HTML doc какая-то кракозябра. Пытался подобрать кодировку с помощью online encoders не получилось. Пару раз приходил нормальный результат, но я не сделал скриншот к сожалению пока воспроизвести не получилось. У сайта есть какая-то защита если да то как ее обойти?

URL ресурса: https://coinmarketcap.com/currencies/solana/

Метод читающий (web scrapping) с ресурса
public async Task<string> ReadTextFromAsync(string source)
{
    if (string.IsNullOrWhiteSpace(source))
        return string.Empty;

    var sb = new StringBuilder();
    var web = new HtmlWeb();

    var HTMLdoc = await web.LoadFromWebAsync(source, Encoding.UTF8);

    HTMLdoc.DocumentNode
        .DescendantsAndSelf()
        .ToList()
        .ForEach(node =>
        {
            // Only if HTML node is type Text
            if (node.NodeType == HtmlNodeType.Text)
                // Only if HTML node contains text and isn't empty
                if (!string.IsNullOrWhiteSpace(node.InnerText))
                    // Take only text from node
                    sb.AppendLine(node.InnerText.Trim());

        });

    return sb.ToString();
}


Скриншот полученного текста:
62710d40036f5765601168.png

Спустя какое-то время (долго) получилось воспроизвести результат и тест прошел. Можно ли как-то обойти эту проблему?

Скриншот прошедшего теста:
627113054e78f754892284.png
  • Вопрос задан
  • 232 просмотра
Подписаться 2 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 2
Не очень понял задание, вам нужно брать цифру под надписью Solana Price? Почему нельзя взять просто cefsharp выполнить скрипт document. query...... И вернуть значение. После получения, обновить страницу.
Ответ написан
@ab1
Вместо страницы паристь API вызываемый на ней?
например
https://api.coinmarketcap.com/data-api/v3/cryptocu...

Больше тут: https://coinmarketcap.com/api/documentation/v1/#se...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы