PDA

Просмотр полной версии : Parse, и с чем его едят


zheka-zh
31.12.2012, 17:15
Заранее извиняюсь перед Hlebnikov, если моя статья похожа не его)

Что ж, раз уж я взялся за браузерные приложения, то в этой статье я расскажу вам о парсинге. Итак, парсинг - это автоматизированный сбор контента или данных с какого-либо сайта или сервиса. Следовательно, программа или скрипт, собирающий информацию или же данные с какого либо сайта или приложения, называется парсером.

Фазы парсинга

Любой парсер состоит из трех частей, которые отвечают за три отдельных процесса парсинга:

1. Получение контента в исходном виде.

Под получением контента, чаще всего подразумевается скачивание кода веб-страницы, из которой необходимо извлечь данные или контент.

2.Извлечение и преобразование данных.

В этой фазе происходит извлечение требуемых данных из полученного, на первом этапе, кода страницы. Чаще всего для извлечения используют регулярные выражения. Также на этом этапе происходит преобразование извлеченных данных к нужному формату, если это требуется;

3.Генерация результата.

Завершающий этап парсинга. На нем происходит вывод или запись полученных, на втором этапе, данных, в требуемый формат. В нашем случае реализовывать вывод мы будем в label.

Что такое парсинг и с чем его едят мы разобрались.

Давайте попробуем реализовать выше написанное на приложении Тюряга.
Я конечно извиняюсь за некий фейк, так как подобная тема уже написана, но я попытаюсь ясно и кратко разжевать суть дела =)
Почему именно в Тюряге?) Потому что:
1) В Тюряге данные не захешированы.
2) Не нужно тратить много времени, копаясь в исходном коде.

Что ж приступим![/B

[B]Создаем новый проект WindowsForms в VisualStudio:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Далее, кидаем на форму:

2 ТеxtBox'a
1 Button
1 Label (для наглядности, вы можете делать сколько нужно)

Программа должна выглядеть примерно так:

[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Если же вы читали первый урок, то будет понятнее что и откуда брать, объяснять еще раз я не буду, поэтому переходим сразу к редактору кода и сразу же добавляем два неймспейса (using):

using System.IO;
using System.Net;


Далее пишем код:


namespace WindowsFormsApplication14
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string id = textBox1.Text;
string key = textBox2.Text;
string PostString = this.post("[Ссылки могут видеть только зарегистрированные и активированные пользователи]", "&method=GetInfo&user" + id + "&key=" + key);

this.label2.Text = this.parsing(PostString, "<money>", "</money");
}
private string post(string req, string url)
{
string sl = "&method=GetInfo&user=" + textBox1.Text + "&key=" + textBox2.Text;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) WebRequest.Create(req);


request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] getBytes = Encoding.ASCII.GetBytes(sl);
request.ContentLength = getBytes.Length;
request.GetRequestStream().Write(getBytes, 0, getBytes.Length);
request.GetRequestStream().Close();
[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) request.GetResponse();
return new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
}

string execute;

private string parsing(string txt, string value1, string value2)
{
execute = "";
string[] StringSeparation = new string[] { " \n " };
string[] result = Text.ToString().Split(StringSeparation, StringSplitOptions.RemoveEmptyEntries);
foreach (string str in result)
{
if (str.IndexOf(value1) != -1)
{
string[] info = str.Split((Convert.ToChar(">")));
execute = info[1].Replace(value2, "");

}

}
return execute;
}

}
}



Вот и все, теперь немного теории.

Мы отправляем запрос серверу тюряги, он дает нам ответ в виде исходного кода,
вот тут мы инициализируем ответ в наш label, указывая, что из всех этих каракуль нам
нужны только определенные строки, затем из этих строк вырезаем нужное значение, и окончательный результат инициализируется в label.

Ну, вот в принципе и все) Если есть какие-то ошибки в коде, не стесняемся, говорим.

Помог? = Ставь спасибку!:pandal:

Sinyss
31.12.2012, 18:40
Уточни что имеется ввиду сбор текстовых данных, иначе это - граббер.

zheka-zh
31.12.2012, 21:10
Я просто привел пример его использования, определения брал с источника, чтобы не ошибиться =) Было бы больше времени уточнил бы по подробнее.

Not_
02.01.2013, 20:38
Статья не несет смысла,добавь комментарии к каждой строке - это будет полезно.

Sinyss
02.01.2013, 21:21
(Convert.ToChar(">")
Бессмысленно и беспощадно...
execute = info[1].Replace(value2, "");
не совсем понял, зачем нам это, ведь строка то все равно сменится...
добавь комментарии к каждой строке - это будет полезно.
Людям которые вообще не понимают что происходит комментарии не помогут, а остальные и так поймут...

zheka-zh
04.01.2013, 18:41
Not_, ну как сказать, я рассчитывал что статью будут читать люди, хотя бы, имеющие малейшие знания c#,
к тому же в первой статье все объяснил = )