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. При копировании указывать ссылку на данную тему.
В этой статье я попробую научить вас основам парсинга с помощью 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. При копировании указывать ссылку на данную тему.