Поиск по блогу

среда, 3 сентября 2008 г.

Еще пара способов получения содержимого страницы

Ранее я описывала самый простой способ получения html-кода страницы. Перед тем, как перейти к созданию прототипа парсера ключевых слов, рассмотрим еще пару способов. При использовании этих способов страница не отображается в контейнере.

Компонент TIdHTTP
Идем на вкладку Indy Clients и из широчайшего выбора компонентов останавливаемся на TIdHTTP. Компонент TIdHTTP (Indy клиент HTTP) используется для поддержки сетевого протокола HTTP на стороне клиента (поддерживаются версии 1.0 и 1.1, включая операции GET, POST и HEAD). Кроме того, обеспечивается поддержка аутентификации пользователей и применение прокси-серверов. Можете самостоятельно поэкспериментировать с ним. Я же покажу самое простое. Киньте на новую форму этот компонент, мемо и кнопку. В обработчике клика кнопки напишите:
  try
s := IdHTTP1.Get('http://yandex.ru');
Memo1.Text := s;
except
end;
Всего одна строчка кода — и в переменной s у вас окажется всё, что вернет Get-запрос. Мы получили все, что нужно для дальнейшей обработки. Кстати, если вы еще не знакомы с протоколом HTTP, то бегом знакомиться.

UrlDownloadToFile
В uses добавляем UrlMon. Объявляем функцию:
function DownloadFile(SourceFile, DestFile: string): Boolean;

Реализация:
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0,
nil) = 0;
except
Result := False;
end;
end;

Пример использования:
try
SLBody:=TStringList.Create;
sFileName:=ExtractFilePath(Application.ExeName) + 'cache.txt';
currBody:='';
if DownloadFile(LinkStr,sFileName) then
SLBody.LoadFromFile(sFileName);
currBody:=SLBody.Text;
DeleteFile(sFileName);
finally
SLBody.Free;
end;

В результате в строковой переменной currBody останется то, что нам надо. Как вы видите, содержимое страницы загружается в файл, потом читается из файла, а сам файл, как ненужный рудимент, удаляется.

Остальные возможные способы будем разбирать по мере надобности. Пока что этих хватит даже с избытком.

Статьи схожей тематики:



4 комментария:

  1. подскажыте один момент машенька. ситуация слудуящая страница содержыт яваскрипт который формирует ифрейм с капчей если получать страницу гет запросом через инди, то ни фрейма ни рисунка капчи я не получаю, как можно решыть эту проблему

    ОтветитьУдалить
  2. seoblog, я не могу сказать точно, надо разбираться, сама не люблю капчи :)

    ОтветитьУдалить
  3. Сообщение немного по теме. На странице есть кнопка, по щелчку на которую формируется ссылка на файл через JS и потом как в Internet Explorer предлагается его скачать. Как быть в данном случае ? UrlDownloadToFile не действует в данном случае, даже если я знаю какая ссылка сгенерирована

    ОтветитьУдалить
    Ответы
    1. Тагир, а запускать JS не пробовали? http://parsing-and-i.blogspot.ru/2009/02/javascript-twebbrowser-delphi.html
      Я не могу сказать ничего определенного, надо смотреть код ява-скрипта.

      Удалить

Комментарии модерируются, вопросы не по теме удаляются, троллинг тоже.

К сожалению, у меня нет столько свободного времени, чтобы отвечать на все частные вопросы, так что, может, свой вопрос лучше задать на каком-нибудь форуме?

Поделиться