Как получить информацию с сайта?

Пишу на C# программу для получения оценок с сайта в текстовый файл. Код, приведенный ниже, берет из файла все оценки и вычисляет среднюю оценку.

            static void Main(string[] args)
            {
                string path = @"C:\Mines.txt"; //путь к файлу с оценками
                FileStream fs = null;
                fs = new FileStream(path, FileMode.Open, FileAccess.Read);
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length); //Читаю файл с оценками
                string fileText = Encoding.Default.GetString(buffer);
                char[] separators = { ' ' };
                string[] strNumbers = fileText.Split(separators); //Разбиваю текст из файла на оценки, записанные каждая через пробел
                int[] numbers = new int[strNumbers.Length]; //Массив с оценками из файла
                for (int i = 0; i < strNumbers.Length; i++) //Заполняю массив
                {
                    numbers[i] = Convert.ToInt32(strNumbers[i]);
                }
                Single resAvgNumber;
                Single sumNumbers = 0;
                for (int i = 0; i < numbers.Length; i++) //Вычисляю среднюю оценку
                {
                    sumNumbers += numbers[i];
                }
                resAvgNumber = sumNumbers / numbers.Length;

                Console.Write("Среднее полученное число: " + resAvgNumber);
                Console.ReadKey();
            }

Вопрос: как мне в файл записывать информацию с сайта Дневник.ру, да и в целом с любых сайтов? Я новичок, так что не осуждайте за корявый код.


Ответы (1 шт):

Автор решения: Sheridan

Казалось бы - сделать запрос, взять страничку, распарсить... Бинго!

Но не всё так просто. Очень мало сейчас сайтов, которые генерируют наполнение на серверах. Страницы сейчас генерируются в голове браузера javascript'ом, которые ходит к api за данными. Соответственно, у вас два варианта:

  1. Использовать headless браузер
  2. Отправлять запросы напрямик в api сайта

Первый вариант более универсальный. Просто пишем движок-парсер-"выкусыватель" данных со страницы для каждого интересующего сайта и скармливаем ему сгенерированные headless-браузером страницы (плюс правила парсинга этой страницы).

Второй вариант потребует меньше работы на парсинг (у вас сразу будут данные json/xml/yaml/etc...), но нужно будет реверсинженерить api (если нет описания) плюс разбираться с возможными ограничениями, авторизациями, токенами итд.

Ну и кстати да, сверху всё это сдобрено необходимостью авторизовываться, запрашивать токены, устанавливать себе cookie и вообще обходить все эти ништяки, которые сделаны для того чтобы предотвратить несанкционированный доступ к данным.

Ну и да, C# тут - из пушки по воробьям. Всё это можно написать сразу для того-же PhantomJS на, собственно, js :)

→ Ссылка