Wassup!
Не так давно 090h опубликовал статью под названием «Грабим награбленное», где рассказал интересную идею по поводу «прошаривания» файлообменников на предмет .txt файлов. Сегодня я бы хотел рассмотреть создания подобного «парсера-качателя» для rghost.ru на C#. Статья рассчитана на новичков, поэтому гуру вряд ли что-то для себя подчеркнут. Сам я являюсь тоже новичком, поэтому заговн быдло-код уж не серчайте на меня. Сразу скажу, в его статье тоже приводятся какие-то скрипты, но я их даже не смотрел, со своими работать как-то приятнее.

Итак, начнем. Создайте WindowsFormsApplication проект, раскидайте по форме все примерно вот так.

Так же на второй вкладке добавьте компонент webBrowser.
Подключаем к классу нужные библиотеки.
Идем дальше, теперь в классе Form1 объявим нужные нам переменные.
В textBox1 у нас будет записываться начальный id файла, он будет преобразовываться в min, в последующем он будет инкрементироваться.
Теперь создаем обработчик событий OnClick для кнопки:
Теперь опишем метод change_url:
После вызова этой функции наш компонент webBrowser1 (находящийся на второй вкладке) получает ссылку на страницу и открывает ее. Теперь нам нужно сделать обработчик событий DocumentComplited для браузера. Т.е, когда страница загружена, вызывается этот обработчик.
Теперь собственно скачивание:
Из неописанных функций у нас остался только конвертер в utf-8, я знаю что можно это делать как-то через Encoding, но что-то я не разобрался. Поэтому в этих ваших интернетах нашел готовую:
Ну вот вроде бы и все.
Готовый проект можно скачать http://rghost.ru/39693631 (на rghost выложил специально, мне интересно, увидев эту статью, удалят ли они этот архив или нет, если что, перезалью)
Это был мой первый пост. В комментария можете ругать меня какой я быдло-кодер.
Удачи!
Не так давно 090h опубликовал статью под названием «Грабим награбленное», где рассказал интересную идею по поводу «прошаривания» файлообменников на предмет .txt файлов. Сегодня я бы хотел рассмотреть создания подобного «парсера-качателя» для rghost.ru на C#. Статья рассчитана на новичков, поэтому гуру вряд ли что-то для себя подчеркнут. Сам я являюсь тоже новичком, поэтому за

Итак, начнем. Создайте WindowsFormsApplication проект, раскидайте по форме все примерно вот так.

Так же на второй вкладке добавьте компонент webBrowser.
Подключаем к классу нужные библиотеки.
using System.Net; // Для работы с интернетом, скачать файлы/взять html
using System.IO;
using System.Text.RegularExpressions; // Регулярные выражения для парсинга
Идем дальше, теперь в классе Form1 объявим нужные нам переменные.
string HTML; // Возьмем HTML код страницы
string UTFhtml; // Преобразуем HTML в utf-8
Regex regex; // Костыли для
Regex regex2; // парсинга
string adress; // Будем записывать ссылки на файлы
string fileURL; // Если нашли .txt, то записываем адрес файла для скачивания
string catalog; // Каталог, куда будут сохраняться файлы
Uri url; // Очередной костыль-преобразователь для браузера
int min; // Номер файла (его id на rghost)
bool active; // Это потом поймете для чего
int provereno; // Считаем сколько файлов проверено
int naideno; // И сколько скачано
В textBox1 у нас будет записываться начальный id файла, он будет преобразовываться в min, в последующем он будет инкрементироваться.
Теперь создаем обработчик событий OnClick для кнопки:
try // Пробуем из textBox'а преобразовать в min(id файла на rghost)
{
min = Convert.ToInt32(textBox1.Text);
}
catch (Exception)
{
MessageBox.Show("Неверный формат мин. или макс. значения",
"Ошибка",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
change_url(); // Одна из важнейших функций, дальше, в статье будет ее описание
Теперь опишем метод change_url:
private void change_url()
{
adress = "http://rghost.ru/" + min; // Генерируем ссылку
provereno++;
label2.Text = "Ссылок проверено: " + Convert.ToString(provereno);
url = new Uri(adress); // Делаем из нее URL
label1.Text = "URL:" + adress;
active = true; // Разрешаем браузеру начать работу
webBrowser1.Url = url; // Ставим в браузер
// а браузер начинает парсить
}
После вызова этой функции наш компонент webBrowser1 (находящийся на второй вкладке) получает ссылку на страницу и открывает ее. Теперь нам нужно сделать обработчик событий DocumentComplited для браузера. Т.е, когда страница загружена, вызывается этот обработчик.
if (active == false) return; // Проверяем, была ли вызвана функция change_url()
adress = webBrowser1.Url.ToString(); // Записываем текущий адрес
var webClient = new System.Net.WebClient(); // Необходим для получения HTML кода.
try // Пробуем получить HTML код страницы
{
HTML = webClient.DownloadString(adress);
}
catch (Exception) // Если вдруг 404 (файла нет)
{
min++;
change_url(); // Генерируем ссылку опять
}
UTFhtml = ConvertToUtf8(HTML); // Конвертируем HTML в utf-8, код функции будет позже
// Начинаем парсить. В этом я не очень силен, поэтому делал это поэтапно.
regex2 = new Regex(@"(.txt — RGhost — файлообменник</title>)");
// Проанализировав title, можно узнать какой файл мы имеем
fileURL = Convert.ToString(regex2.Match(UTFhtml));
// Если формат .txt
if(fileURL == ".txt — RGhost — файлообменник</title>")
{
// То пытаемся найти ссылку на скачивание
regex = new Regex(@"(.txt)");
fileURL = Convert.ToString(regex.Match(UTFhtml));
regex = new Regex(@"(?<=<h1>)[\d\D]+(?=</h1>)");
fileURL = Convert.ToString(regex.Match(UTFhtml));
// Фильтруем дальше
regex = new Regex(@"(?<=href)[\d\D]+(?=class)");
fileURL = Convert.ToString(regex.Match(fileURL));
// Очередной фильтр
regex = new Regex(@"(?<="")[\d\D]+(?="")");
fileURL = Convert.ToString(regex.Match(fileURL));
naideno++;
label3.Text = "Файлов найдено: " + Convert.ToString(naideno);
// Получаем ссылку и скачиваем файл
download(); // Скачиваем, функция тоже будет описана позже
return;
}
min++;
change_url(); // Скачали или нет - неважно, все равно генерируем новую ссылку.
Теперь собственно скачивание:
private void download()
{
var webClient = new WebClient();
System.IO.Directory.CreateDirectory(@"c:/PSWDfinder/"); // Создаем каталог
catalog = @"c:/PSWDfinder/" + Convert.ToString(min) + ".txt"; // Каталог +id файла + .txt
try // Пробуем его скачать,
{
webClient.DownloadFileAsync(new Uri(fileURL), catalog);
}
catch (Exception) // Если не скачался (например, файл удален)
{
min++;
change_url(); // Генерируем опять ссылку
}
min++;
change_url(); // Генерируем
Из неописанных функций у нас остался только конвертер в utf-8, я знаю что можно это делать как-то через Encoding, но что-то я не разобрался. Поэтому в этих ваших интернетах нашел готовую:
private string ConvertToUtf8(string source)
{
Encoding win1251 = Encoding.GetEncoding("windows-1251");
Encoding utf8 = Encoding.GetEncoding("utf-8");
byte[] win1251Bytes = utf8.GetBytes(source);
byte[] utf8Bytes = Encoding.Convert(utf8, win1251, win1251Bytes);
source = utf8.GetString(utf8Bytes);
return source;
}
Ну вот вроде бы и все.
Готовый проект можно скачать http://rghost.ru/39693631 (на rghost выложил специально, мне интересно, увидев эту статью, удалят ли они этот архив или нет, если что, перезалью)
Это был мой первый пост. В комментария можете ругать меня какой я быдло-кодер.
Удачи!