PDA

Просмотр полной версии : [Статья] Основы парсинга с помощью Indy. Delphi.


VeTaL_UA
05.11.2011, 13:50
Доброго времени суток!

В этой статье я попробую научить вас основам парсинга с помощью Indy. Парсить информацию мы будем из сайта dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).

Что нам нужно для работы:

Delphi любой версии. Ссылки на скачку:

Delphi 7(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Delphi 2010(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Delphi XE(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Charles любой версии. Ссылка на скачку:

Charles 3.5.2(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Учётная запись на сайте dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]);
Желание;


Перед тем как прочитать эту статью, рекомендую прочитать мою предыдущую статью ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) по авторизации на этом сайте...

Ну что же, если все пункты присутствуют можно начать.



Переходим на сайт dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]). Вы не должны быть авторизованы на сайте! Если вы авторизованы на сайте, тогда выйдите со своего профиля.
Включаем Charles. Ждем пока он включится и, когда он включился, нажимаем на кнопочку:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Должен засветится красный огонёк посередине кнопочки:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
В дальнейшем я буду называть эту кнопку кнопкой "Запись", а её состояние на первом рисунке - выключенной, на втором - включенной.
Переходим в окно браузера и авторизуемся на сайте dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]). Когда авторизовались, переходим на страницу настроек профиля.
Теперь переходим в окно Charles и выключаем "Запись".
Теперь мы можем переходить к анализу полученных данных. В поле вкладки "Structure" должны были появится адреса сайтов:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Из этих адресов, нас интересует только "[Ссылки могут видеть только зарегистрированные и активированные пользователи]". Кликаем на нем:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь поясню что же появилось:

В папке "profile" лежит наш запрос на переход на страницу профиля;
<default> - это запрос на авторизацию на сайте;

Теперь выбираем <default>:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
И переходим на вкладку "Response":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Как видим, в выделенной на скрине строке есть ссылка на редактирование профиля. В ссылке присутствует ник пользователя:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь открываем папку "profile" и выбираем в ней <default>:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
И переходим на вкладку "Overview":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Мы увидели, что при переходе на страницу настроек, в адресе, на который отсылается запрос, присутствует ник пользователя.
Теперь переходим на вкладку "Response":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
На скрине видно, то, что в Response этого запроса лежит почта:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Теперь, когда мы собрали всю нужную информацию, можно приступать к написанию кода.


Теперь мы приступаем к написанию кода.

Запускаем делфи;
Кидаем на форму два компонента Edit, два компонента Label один компонент Button и один компонент CheckBox из вкладки "Standart":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Кидаем на форму один компонент IdHTTP из вкладки "Indy Clients":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Создаем обработчик событий OnClick на компоненте Button(два раза кликаем по Button'у);
Теперь нам нужно написать исполняемый код.Но для этого надо знать, что писать:

Для начала я вставлю код авторизации из моей предыдущей статьи:
procedure TForm1.Button1Click(Sender: TObject);
var
Data:TStringList;
Request:String;
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
begin
Data:=TStringList.Create;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](nil);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
Data.Add('auth_login='+Edit1.Text);
Data.Add('auth_password='+Edit2.Text);
if CheckBox1.Checked then
begin
Data.Add('auth_remember=ok');
end;
try
Request:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Data);
if Pos('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Request)<>0 then
begin
ShowMessage('Авторизация прошла успешно');
end
else
begin
ShowMessage('Авторизация не удалась');
end;
finally
Data.Free;
Request:='';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
end;
Теперь мы будем копировать ник пользователя из переменной "Request" в переменную "s" и выводить его в Label1:
s:=copy(Request,pos('!-- profile',Request)+35,pos('/edit/ -->',Request)-798);
Label1.Caption:='Ник: "'+s+'"';
Выделенные числа определены подбором :)
В этом коде мы копируем текст из переменной "Request" в переменную "s". Начальной позицией для копирования является позиция, которая на 35 больше позиции текста:
!-- profile
в переменной "Request". Конечной позицией для копирования является позиция, которая на 798 меньше позиции строки:
/edit/ -->
в переменной "Request";
Теперь мы будем отправлять Get запрос на адрес настроек профиля:
Request1:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]'+s+'/edit/');
Теперь мы будем копировать e-mail из переменной "Request1" в переменную "s" и выводить его в Label2:
s:=copy(Request1,pos('user_reg_email',Request1)+22 ,
pos(' style="width: 300px" disabled>',Request1)-16700);
Delete(s,Pos(' style',s),Pos(': 300px',s));
Label2.Caption:='e-mail: '+s;
Выделенные числа определены подбором :)
В этом коде мы копируем текст из переменной "Request" в переменную "s", подчищая лишнее. Начальной позицией для копирования является позиция, которая на 22 больше позиции текста:
user_reg_email
в переменной "Request1". Конечной позицией для копирования является позиция, которая на 16700 меньше позиции текста:
style="width: 300px" disabled>
в переменной "Request1";
Дальнейшие наши действия совпадают с теми, которые я описывал в своей предыдущей статьи, поэтому расписывать я их не буду.


Полный код процедуры нажатия на кнопку:
procedure TForm1.Button1Click(Sender: TObject);
var
Data:TStringList;
Request,s,Request1:String;
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
begin
Data:=TStringList.Create;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](nil);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
Data.Add('auth_login='+Edit1.Text);
Data.Add('auth_password='+Edit2.Text);
if CheckBox1.Checked then
begin
Data.Add('auth_remember=ok');
end;
try
Request:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Data);
s:=copy(Request,pos('!-- profile',Request)+35,pos('/edit/ -->',Request)-798);
Label1.Caption:='Ник: "'+s+'"';
Request1:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]'+s+'/edit/');
s:=copy(Request1,pos('user_reg_email',Request1)+22 ,
pos(' style="width: 300px" disabled>',Request1)-16700);
Delete(s,Pos(' style',s),Pos(': 300px',s));
Label2.Caption:='e-mail: '+s;
if Pos('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Request)<>0 then
begin
ShowMessage('Авторизация и сбор данных прошли успешно');
end
else
begin
ShowMessage('Авторизация и сбор данных не удались');
end;
finally
Data.Free;
Request:='';
s:='';
Request1:='';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
end;

Теперь, когда мы закончили написание программы, запускаем программу и смотрим, что получилось.

Скачать исходник(1 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]*********/fd26289),2 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),3 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),4 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),5 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Скачать скриншоты(1 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]*********/fd26287),2 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),3 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),4 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),5 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Статья писалась VeTaL_UA для Zhyk.RU. При копировании указывать ссылку на данную тему.

blad56
05.11.2011, 14:16
Малодец, клевая статья. Если бы задействовал ещё Regexpr то вообще было бы красиво:)

VeTaL_UA
05.11.2011, 14:58
Если бы задействовал ещё Regexpr то вообще было бы красиво
Статья показывает общие принципы, а RegExp их скрывает ;)

game_guru
06.01.2012, 17:07
А у меня почему то пишет ошибку(

VeTaL_UA
06.01.2012, 17:08
А у меня почему то пишет ошибку(
Какую ошибку у тебя пишет?

Shook†
07.01.2012, 12:15
Хорошая статья. Особенно понравилось работа с чарликом, но прошу заметить, лутше бы ты выложил сразу крякнутый чарлик, у многих демка давно кончилась, ну у меня точно/problem

VeTaL_UA
07.01.2012, 12:47
лутше бы ты выложил сразу крякнутый чарлик, у многих демка давно кончилась, ну у меня точно
Это не варезный портал ;)

V1rt1L3R
02.02.2012, 16:16
Кстати кому нужно что бы данные парсились при нажатии кнопки, то вот
procedure TForm1.Button1Click(Sender: TObject);
var p,G:string;
begin
G:=Id[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]сайт.ру/');
p:=Copy(G,Pos('<тег>',G)+16,Pos('тоже тег',G)-5035);
Label4.Caption:=p;
end;

Кстати Веталь как правильно определять сколько символов нужно удалять после второго тега?? а то я наугад вписал что бы найти)

VeTaL_UA
02.02.2012, 21:08
Кстати Веталь как правильно определять сколько символов нужно удалять после второго тега?? а то я наугад вписал что бы найти)
Примерно посчитать, а потом подбирать :)

V1rt1L3R
02.02.2012, 21:18
НУ примерно, так же как я и делал

VeTaL_UA
02.02.2012, 22:32
НУ примерно, так же как я и делал
Ты делал через анальное отверствие, а я говорю, примерно ;)

Допустим, есть такая строка:
<blo><name="ololo"><value="1234567890"></blo>
Вспомним, что собой представляет функция Copy:
Copy({строка с исходным текстом},
{Число, обозначающее позицию первого символа значения, которое мы парсим, в исходном тексте},
{Число, обозначающее количество символов, которые мы будем копировать});
Чтобы узнать второй параметр для функции Copy, программисты чаще всего используют функцию Pos.
Давайте и о ней вспомним:
Pos({строка, позицию первого символа которой мы будем искать в исходном тексте},
{Строка с исходным текстом});
Теперь давайте подумаем, как всё это использовать.
Засунем в переменную s(string) исходный текст:
var
s:string;
begin
s:='<blo><name="ololo"><value="1234567890"></blo>';
end;
Теперь давайте выберем из этой строки ориентировочный кусок, который не повторяется и по какому мы будем искать второй параметр для функции Copy. Я бы советовал использовать куски типа "<name="blabla">", так как они, вероятнее всего, не будут повторятся в исходном тексте. В нашем случае мы будем использовать строку:
<name="ololo">.
Как же по ней найти первый символ нужного нам значения(1234567890)? Нам поможет функция Pos. С помощью этой функции узнаём позицию первого символа нашей проверочной строки:
var
s:string;
i:integer;
begin
s:='<blo><name="ololo"><value="1234567890"></blo>';
i:=Pos('<name="ololo">',s);
end;
Дальше будем считать.
Позицией первого символа проверочной строки является число 'i'. Где оно находится на примере:
<blo><name="ololo"><value='1234567890></blo>
Дальше посчитаем сколько символов находится между этим символом и первым символом нужного нам значения. Я насчитал 22. Если вы насчитали больше/меньше, то причиной этому могут быть магнитные бури или высокая активность солнца. Теперь давайте запишем в 'i' позицию первого символа нужного нам значения:
var
s:string;
i:integer;
begin
s:='<blo><name="ololo"><value="1234567890"></blo>';
i:=Pos('<name="ololo">',s);
i:=i+22;
end;
Давайте считать дальше.
Мы нашли число, которое нужно для 2 параметра функции Copy. Теперь будем искать 3 параметр. Давайте посчитаем, сколько символов занимает наше значение. Я насчитал 10. Если вы насчитали больше/меньше, то причиной этому могут быть чёртики, которых вы видите ещё после вчерашнего сабантуя.
Теперь, когда мы нашли все параметры для функции Copy, давайте, наконец-то запишем в 's' нужное нам значение, заменив им исходный текст:
var
s:string;
i:integer;
begin
s:='<blo><name="ololo"><value="1234567890"></blo>';
i:=Pos('<name="ololo">',s);
i:=i+22;
s:=Copy(s,i,10);
end;
Вуаля. Теперь в переменной 's' находится нужное нам значение, то есть "1234567890".

Если вы не поняли это объяснение, то я советую вам закончить 4 класс общеобразовательной школы.

С вами был VeTaL_UA.

Velogon
14.02.2012, 22:29
VeTaL_UA, так-же можно использовать HTTP Analyzator ?

VeTaL_UA
15.02.2012, 16:52
VeTaL_UA, так-же можно использовать HTTP Analyzator ?
Можно использовать любой сниффер. В этой статье я использовал Charles. Главное, чтобы данные запроса были составлены правильно.

VeTaL_UA
02.04.2012, 21:36
а можно ли авторизацию сделать через synapse ?
Конечно же можно :) В статье описан процесс авторизации на Indy потому, что он проще :)

MastaDan
31.05.2012, 12:41
Наконец то я понял как парсить, но возник поврос.

Что делать если текст в коде повторяется ?

Как указать именно тот который надо спарсить.

Пример:

Есть такая строчка

<div class="element-header font-la2">Сервер</div>


А есть такая

<div class="element-header font-la2">Аккаунт</div>


Как быть в таком случае ? Если мне например надо спарсить первую строчку.

Добавлено через 14 минут
А все, сам решил проблему, просто взял по больше кода и отсчитал :)

<div class="element sidebar"> <div class="element-header font-la2">Аккаунт</div>

Tip.the.besT
03.07.2012, 19:45
Доброго времени суток!

В этой статье я попробую научить вас основам парсинга с помощью Indy. Парсить информацию мы будем из сайта dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).

Что нам нужно для работы:

Delphi любой версии. Ссылки на скачку:

Delphi 7(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Delphi 2010(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Delphi XE(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Charles любой версии. Ссылка на скачку:

Charles 3.5.2(deposit ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),torrent ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Учётная запись на сайте dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]);
Желание;


Перед тем как прочитать эту статью, рекомендую прочитать мою предыдущую статью ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) по авторизации на этом сайте...

Ну что же, если все пункты присутствуют можно начать.



Переходим на сайт dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]). Вы не должны быть авторизованы на сайте! Если вы авторизованы на сайте, тогда выйдите со своего профиля.
Включаем Charles. Ждем пока он включится и, когда он включился, нажимаем на кнопочку:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Должен засветится красный огонёк посередине кнопочки:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
В дальнейшем я буду называть эту кнопку кнопкой "Запись", а её состояние на первом рисунке - выключенной, на втором - включенной.
Переходим в окно браузера и авторизуемся на сайте dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи]). Когда авторизовались, переходим на страницу настроек профиля.
Теперь переходим в окно Charles и выключаем "Запись".
Теперь мы можем переходить к анализу полученных данных. В поле вкладки "Structure" должны были появится адреса сайтов:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Из этих адресов, нас интересует только "[Ссылки могут видеть только зарегистрированные и активированные пользователи]". Кликаем на нем:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь поясню что же появилось:

В папке "profile" лежит наш запрос на переход на страницу профиля;
<default> - это запрос на авторизацию на сайте;

Теперь выбираем <default>:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
И переходим на вкладку "Response":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Как видим, в выделенной на скрине строке есть ссылка на редактирование профиля. В ссылке присутствует ник пользователя:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь открываем папку "profile" и выбираем в ней <default>:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
И переходим на вкладку "Overview":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Мы увидели, что при переходе на страницу настроек, в адресе, на который отсылается запрос, присутствует ник пользователя.
Теперь переходим на вкладку "Response":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
На скрине видно, то, что в Response этого запроса лежит почта:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Теперь, когда мы собрали всю нужную информацию, можно приступать к написанию кода.


Теперь мы приступаем к написанию кода.

Запускаем делфи;
Кидаем на форму два компонента Edit, два компонента Label один компонент Button и один компонент CheckBox из вкладки "Standart":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Кидаем на форму один компонент IdHTTP из вкладки "Indy Clients":
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Создаем обработчик событий OnClick на компоненте Button(два раза кликаем по Button'у);
Теперь нам нужно написать исполняемый код.Но для этого надо знать, что писать:

Для начала я вставлю код авторизации из моей предыдущей статьи:
procedure TForm1.Button1Click(Sender: TObject);
var
Data:TStringList;
Request:String;
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
begin
Data:=TStringList.Create;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](nil);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
Data.Add('auth_login='+Edit1.Text);
Data.Add('auth_password='+Edit2.Text);
if CheckBox1.Checked then
begin
Data.Add('auth_remember=ok');
end;
try
Request:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Data);
if Pos('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Request)<>0 then
begin
ShowMessage('Авторизация прошла успешно');
end
else
begin
ShowMessage('Авторизация не удалась');
end;
finally
Data.Free;
Request:='';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
end;
Теперь мы будем копировать ник пользователя из переменной "Request" в переменную "s" и выводить его в Label1:
s:=copy(Request,pos('!-- profile',Request)+35,pos('/edit/ -->',Request)-798);
Label1.Caption:='Ник: "'+s+'"';
Выделенные числа определены подбором :)
В этом коде мы копируем текст из переменной "Request" в переменную "s". Начальной позицией для копирования является позиция, которая на 35 больше позиции текста:

в переменной "Request". Конечной позицией для копирования является позиция, которая на 798 меньше позиции строки:

в переменной "Request";
Теперь мы будем отправлять Get запрос на адрес настроек профиля:
Request1:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]'+s+'/edit/');
Теперь мы будем копировать e-mail из переменной "Request1" в переменную "s" и выводить его в Label2:
s:=copy(Request1,pos('user_reg_email',Request1)+22 ,
pos(' style="width: 300px" disabled>',Request1)-16700);
Delete(s,Pos(' style',s),Pos(': 300px',s));
Label2.Caption:='e-mail: '+s;
Выделенные числа определены подбором :)
В этом коде мы копируем текст из переменной "Request" в переменную "s", подчищая лишнее. Начальной позицией для копирования является позиция, которая на 22 больше позиции текста:

в переменной "Request1". Конечной позицией для копирования является позиция, которая на 16700 меньше позиции текста:

в переменной "Request1";
Дальнейшие наши действия совпадают с теми, которые я описывал в своей предыдущей статьи, поэтому расписывать я их не буду.


Полный код процедуры нажатия на кнопку:
procedure TForm1.Button1Click(Sender: TObject);
var
Data:TStringList;
Request,s,Request1:String;
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
begin
Data:=TStringList.Create;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](nil);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
Data.Add('auth_login='+Edit1.Text);
Data.Add('auth_password='+Edit2.Text);
if CheckBox1.Checked then
begin
Data.Add('auth_remember=ok');
end;
try
Request:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Data);
s:=copy(Request,pos('!-- profile',Request)+35,pos('/edit/ -->',Request)-798);
Label1.Caption:='Ник: "'+s+'"';
Request1:=[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]'+s+'/edit/');
s:=copy(Request1,pos('user_reg_email',Request1)+22 ,
pos(' style="width: 300px" disabled>',Request1)-16700);
Delete(s,Pos(' style',s),Pos(': 300px',s));
Label2.Caption:='e-mail: '+s;
if Pos('[Ссылки могут видеть только зарегистрированные и активированные пользователи]',Request)<>0 then
begin
ShowMessage('Авторизация и сбор данных прошли успешно');
end
else
begin
ShowMessage('Авторизация и сбор данных не удались');
end;
finally
Data.Free;
Request:='';
s:='';
Request1:='';
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
end;

Теперь, когда мы закончили написание программы, запускаем программу и смотрим, что получилось.

Скачать исходник(1 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]*********/fd26289),2 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),3 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),4 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),5 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));
Скачать скриншоты(1 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]*********/fd26287),2 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),3 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),4 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]),5 ([Ссылки могут видеть только зарегистрированные и активированные пользователи]));

Статья писалась VeTaL_UA для Zhyk.RU. При копировании указывать ссылку на данную тему.

Хорошая статья. Особенно порадовало то, что юзаешь copy pos delete :hd:

А то все регулярки юзают. ИМХО легче вышеуказанными функциями, да и при больших объёмах, например парсинге xml файлов(каталог товаров большого магазина например) скорость работы данных функций будет гораздо быстрее регулярок. Так, что я обеими руками за написания подобных статей, молодцом!

З.Ы. А то новички уже скоро всё будут писать на готовых компонентах, не понимая, что делают)

VeTaL_UA
12.07.2012, 10:29
KsenomorFFF, копируй код с темы, в конце же есть полный код :)

Smolyakoff
03.10.2012, 19:31
VeTaL_UA, чарлик не ловит пакеты,возможно что-то не установил?скачал их пробную версию с офф сайта,зашел в мозилу,включил запись ,ну всё по вашему описанию,а пакеты так и не ловились,в чем можно быть проблема?

VeTaL_UA
03.10.2012, 23:28
в чем можно быть проблема?
В настройках браузера проставь использование прокси 127.0.0.1 с портом 8888

Smolyakoff
04.10.2012, 16:31
VeTaL_UA, а что делать,если я поймал пакеты,а там нет папки profile,пытаюсь не на dump авторизоваться.

VeTaL_UA
04.10.2012, 16:45
VeTaL_UA, а что делать,если я поймал пакеты,а там нет папки profile,пытаюсь не на dump авторизоваться.
Пффф... Это же пример, в 99% случаев не будет папки profile, надо просто найти нужный запрос и скопироваться его ;)

лома4
20.10.2012, 01:47
VeTaL_UA, при запуске программы выдает ошибку в этой строке
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
копировал с вашей темы,в чем тут проблема?

VeTaL_UA
21.10.2012, 01:01
в чем тут проблема?
киньте на форму IdHTTP с вкладки Indy Clients.

лома4
22.10.2012, 03:24
киньте на форму IdHTTP с вкладки Indy Clients.
Ну так я и перекинул,на пустое поле,или поверх другого компонента например буттона?

VeTaL_UA
23.10.2012, 16:41
Ну так я и перекинул
Инди переставлял?

лома4
24.10.2012, 20:35
Инди переставлял?
как?

-=Cs 1.6=-
01.09.2013, 13:04
Мы увидели, что при переходе на страницу настроек, в адресе, на который отсылается запрос, присутствует ник пользователя.
Теперь переходим на вкладку "Response":
Скрин
Обнови картинку.

И ещё вопрос: так можно делать для любых сайтов?

Sinyss
01.09.2013, 23:10
Обнови картинку.

И ещё вопрос: так можно делать для любых сайтов?
Ну в общих чертах -да.
Некоторые сайты используют json что бы подгружать контент, там будут некоторые изменения )