• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

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

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Основы парсинга с помощью Indy. Delphi.

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Сообщения
1,151
Симпатии
222
Баллы
155
VK
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Data:TStringList;
Request:String;
HTTP:TIdHTTP;
begin
Data:=TStringList.Create;
HTTP:=TIdHTTP.Create(nil);
HTTP.Request.UserAgent := '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:=HTTP.Post('http://dump.ru/',Data);
   if Pos('http://dump.ru/profile/',Request)<>0 then
    begin
    ShowMessage('Авторизация прошла успешно');
    end
   else
    begin
    ShowMessage('Авторизация не удалась');
    end;
finally
  Data.Free;
  Request:='';
  HTTP.Free;
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:=HTTP.Get('http://dump.ru/profile/'+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;
HTTP:TIdHTTP;
begin
Data:=TStringList.Create;
HTTP:=TIdHTTP.Create(nil);
HTTP.Request.UserAgent := '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:=HTTP.Post('http://dump.ru/',Data);
  s:=copy(Request,pos('!-- profile',Request)+35,pos('/edit/ -->',Request)-798);
  Label1.Caption:='Ник: "'+s+'"';
  Request1:=HTTP.Get('http://dump.ru/profile/'+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('http://dump.ru/profile/',Request)<>0 then
    begin
    ShowMessage('Авторизация и сбор данных прошли успешно');
    end
   else
    begin
    ShowMessage('Авторизация и сбор данных не удались');
    end;
finally
  Data.Free;
  Request:='';
  s:='';
  Request1:='';
  HTTP.Free;
end;
end;
 
Вверх Снизу