Как получить информацию с сайта?
Пишу на 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 шт):
Казалось бы - сделать запрос, взять страничку, распарсить... Бинго!
Но не всё так просто. Очень мало сейчас сайтов, которые генерируют наполнение на серверах. Страницы сейчас генерируются в голове браузера javascript'ом, которые ходит к api за данными. Соответственно, у вас два варианта:
- Использовать headless браузер
- Отправлять запросы напрямик в api сайта
Первый вариант более универсальный. Просто пишем движок-парсер-"выкусыватель" данных со страницы для каждого интересующего сайта и скармливаем ему сгенерированные headless-браузером страницы (плюс правила парсинга этой страницы).
Второй вариант потребует меньше работы на парсинг (у вас сразу будут данные json/xml/yaml/etc...), но нужно будет реверсинженерить api (если нет описания) плюс разбираться с возможными ограничениями, авторизациями, токенами итд.
Ну и кстати да, сверху всё это сдобрено необходимостью авторизовываться, запрашивать токены, устанавливать себе cookie и вообще обходить все эти ништяки, которые сделаны для того чтобы предотвратить несанкционированный доступ к данным.
Ну и да, C# тут - из пушки по воробьям. Всё это можно написать сразу для того-же PhantomJS на, собственно, js :)