Ну вот наконец-то добрался до того, как бы нам получить капчу с сайтов, для полуавтоматического ввода ее, а если написать алгоритм распознавания капчи или воспользоваться специальными сервисами, то и до автоматического, но прежде всего нам надо эту самую капчу получить. Ну да и до того как нам ее получить, мы должны знать какого она формата, конечно мы же не сможем запихнуть в 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
Инте
Похожие записи
Метки: get, Idhttp, парсинг, парсинг html-страниц, парсинг данных
К записи “Парсинг данных. Получение капчи” оставлено комментариев: 16.
Оставить комментарий на moren
хуита банальная! если капча при каждом запросе меняетца, уже не проканает ! думай дальше
ncux сам ты хуита банальная, имей совесть и уважения, человек старался, если умный дак поправь те ещё за это спасибо скажут
to ncux. Можно и без матов выразить недовольство, а пост почитать не судьба? написано парсинг данных и тут не идет речь о том, чтобы парсинг работал так, чтобы все время получал нужную информацию, даже при изменении структуры сайта! думай дальше
Спасибо автору за урок
Delete(html,1,pos(‘
У меня не даёт её скомпилировать.
ошибка в этой строчки
какая версия Delphi?, возможно необходимо вам поменять тип переменной html
Спасибо, целый день убил, что бы найти пример! Респект автору
спасибо за отзыв
Не работает под Windows 7 под XP все нормально в чем может быть проблемма?
какая хоть ошибка появляется у Вас?
спасибо, помогло заработать деньги, сделал интересную программу
модуль pngimage в import type library не обнаружил. видимо его отдельно нужно скачивать. у меня стоит delphi 7. можешь подсказать, как мне поступить лучше?
В Delphi 7, этот модуль необходимо скачивать отдельно, он не встроен туда!
Помогите у меня выскакивает ошибка в zlibpas что делать?
Кинь свой скайп, нужна помощь.
Как кто-то сказал.. хуита !
Смысла в этом уроке практически нету !
Кстати урок лучше переименовать в «Парсинг картинки».
Кому блять нужен парсинг капчи без её дальнейшего использования ??
Вообщем урок бредовый, одно название.