Ну вот наконец-то добрался до того, как бы нам получить капчу с сайтов, для полуавтоматического ввода ее, а если написать алгоритм распознавания капчи или воспользоваться специальными сервисами, то и до автоматического, но прежде всего нам надо эту самую капчу получить. Ну да и до того как нам ее получить, мы должны знать какого она формата, конечно мы же не сможем запихнуть в 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('http://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('http://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos(',html)+length('));
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('http://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos(',html)+length('));
Delete(html,pos('" id',html),length(html));
Stream:=TStringStream.Create(IdHTTP1.Get('http://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('http://freelance.ru/registration/?cmd=agree');
Delete(html,1,pos(',html)+length('));
Delete(html,pos('" id',html),length(html));
Stream:=TStringStream.Create(IdHTTP1.Get('http://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 запрос на данный сайт и регистрироваться из программы. Ну вот и подошла к концу очередь статей по парсингу данных, теперь только парсинг данных с помощью регулярных выражений.

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

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

Кстати, хочу заметить, что недавно наткнулся на сайт, где можно скачать DeDe. Вообще, декомпиляторы — удобная вещь, а тем более те, которые позволяют определить на каком языке, написано приложение. Кроме всего этого на сайте нашел огромное количество исходников на Delphi.

Исходники статьи качаем тут

Автор статьи - Andrey53
Инте

Метки: , , , ,




К записи “Парсинг данных. Получение капчи” оставлено комментариев: 16.

  1. ncux:

    хуита банальная! если капча при каждом запросе меняетца, уже не проканает ! думай дальше

  2. Аноним:

    ncux сам ты хуита банальная, имей совесть и уважения, человек старался, если умный дак поправь те ещё за это спасибо скажут

  3. Andrey53:

    to ncux. Можно и без матов выразить недовольство, а пост почитать не судьба? написано парсинг данных и тут не идет речь о том, чтобы парсинг работал так, чтобы все время получал нужную информацию, даже при изменении структуры сайта! думай дальше

  4. Міша:

    Спасибо автору за урок

  5. Ser:

    Delete(html,1,pos(‘

    У меня не даёт её скомпилировать.
    ошибка в этой строчки

  6. killer_1C:

    Спасибо, целый день убил, что бы найти пример! Респект автору :)

  7. killer_1C:

    Не работает под Windows 7 под XP все нормально в чем может быть проблемма? :)

  8. Анатолий:

    спасибо, помогло заработать деньги, сделал интересную программу

  9. valishok:

    модуль pngimage в import type library не обнаружил. видимо его отдельно нужно скачивать. у меня стоит delphi 7. можешь подсказать, как мне поступить лучше?

  10. moren:

    Как кто-то сказал.. хуита !
    Смысла в этом уроке практически нету !
    Кстати урок лучше переименовать в «Парсинг картинки».
    Кому блять нужен парсинг капчи без её дальнейшего использования ??
    Вообщем урок бредовый, одно название.

Оставить комментарий на killer_1C

Вы можете использовать следующие теги:

*