Парсинг данных. Получение капчи

5 минут на чтение

Ну вот наконец-то добрался до того, как бы нам получить капчу с сайтов, для полуавтоматического ввода ее, а если написать алгоритм распознавания капчи или воспользоваться специальными сервисами, то и до автоматического, но прежде всего нам надо эту самую капчу получить. Ну да и до того как нам ее получить, мы должны знать какого она формата, конечно мы же не сможем запихнуть в bmp — jpg или наооборот. Вот тут есть один популярный сервис по удаленной работе, ссылки публиковать не стану, но если скачаете исходник урока, то поймете что за сервис, так вот там есть у него в поле регистрации ввода капчи, вот эту мы самю капчу и получим, а после получения, можно спокойно слать запрос на сервер для регистрации. Там капча формата png, конечно в Delphi нет возможностей по работе с этим форматом картинок, вот поэтому мы и воспользуемся библиотекой pngimage. Работать с переменными данного формата точно также, как с теми же TJPegImage.Ну что нам как всегда для начала, надо получить код нашей страничке и пропарсить ее, то есть посмотреть где этам самая картинка лежит, чтобы потом ее отобразить в TImage.

Что для этого нам понадобится

  • TIdHttp
  • TIdAntiFreeze
  • TButton
  • TImage

Про то, где находятся компоненты, скажу только про 2 компонента

  • TidHTTP — вкладка Indy Clients
  • TidAntiFreeze — вкладка Indy Misc

Так все компоненты находятся на нашей форме теперь можно приступить. Ну что получим код нашей страничке, а получается он так (мы это уже проходили)

procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
begin
try
html:=IdHTTP1.Get('https://freelance.ru/registration/?cmd=agree');
except
on e:Exception do
end;
end;

Код получен, начало делу положено, теперь начнем парсить страницу и получим url на нашу картинку. Как парсить страницы, Вы можете уже, так что дополним наш код

procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
begin
try
html:=IdHTTP1.Get('https://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos('<td><img src="',html)+length('<td><img src="'));
Delete(html,pos('" id',html),length(html));
ShowMessage(html);
except
on e:Exception do
end;
end;

Отлично url картинки получено, теперь надо ее отобразить в TImage, для этого в Uses подключим модуль pngimage. Скопируйте с архива все модули в ваш проект (в папку с проектом и смело подключайте). Далее создадим переменную памяти, куда первоначально загрузим нашу картинку

procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
Stream:TStream;
begin
try
html:=IdHTTP1.Get('https://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos('<td><img src="',html)+length('<td><img src="'));
Delete(html,pos('" id',html),length(html));
Stream:=TStringStream.Create(IdHTTP1.Get('https://freelance.ru/'+html));
Stream.Free;
except
on e:Exception do
begin
Stream.Free;
end;
end;
end;

Так картинка у нас в переменной памяти, теперь надо ее отобразить, как помните, она у нас png формата, поэтому создаем переменную данного типа и отображаем ее в TImage.

procedure TForm1.Button1Click(Sender: TObject);
var
html:WideString;
Stream:TStream;
png:TPNGObject;
begin
try
png:=TPNGObject.Create;
html:=IdHTTP1.Get('https://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos('<td><img src="',html)+length('<td><img src="'));
Delete(html,pos('" id',html),length(html));
Stream:=TStringStream.Create(IdHTTP1.Get('https://freelance.ru/'+html));
png.LoadFromStream(Stream);
Image1.Picture.Assign(png);
Stream.Free;
png.Free;
except
on e:Exception do
begin
png.Free;
Stream.Free;
end;
end;
end;

Теперь у меня отлично отображается картинка в TImage, можете теперь отсылать Post запрос на данный сайт и регистрироваться из программы. Ну вот и подошла к концу очередь статей по парсингу данных, теперь только парсинг данных с помощью регулярных выражений.

Интересует где не дорого можно заказать проектирование и установку систем видеонаблюдения? Обратитесь в компанию Евро-Ива. Инженеры компании сделают все необходимые работы быстро, качественно и не дорого.

Вот так у меня выглядит мой проект

Facebook Vk Ok LinkedIn Telegram

Похожие записи:

В этой статье я хотел бы рассказать о посылках (отправке) POST-запросов на сервер (сайт). Получение капчи мы прошли, а в некоторых случаях Вам значени капчи надо отправить на сервер например и зарегестироваться на сайте каком-нибудь программно. Вообще в этом с...
Продолжаем работу с базами данных. На этот раз, хотел бы рассмотреть фильтрацию данных в БД. Вообще, хотелось бы поговорить, для чего она предназначена, а также способы фильтрации данных, другими словами поиска данных в БД, с использованием технологии ADO. Как...
В части мы рассмотрели как можно пропарсить данные, не используя регулярные выражения. Мы даже написали свою функцию парсинга данных, которую можно будет использовать в данной статье, но я обойдусь без нее, а Вы сможете ею воспользоваться, если конечно захотит...