Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема с парсингом html


Автор: ASGDeveloper 13.5.2006, 09:08
Возникла проблема. Нужно из html-файла получить пути загружаемых картинок и проверить, являются ли они ссылками.
Пути к картинкам я успешно получаю, но вот проверить, являются ли они ссылками - не получается.
Я уже испробовал 4 или 5 разных парсеров, но не один не может выполнить моей задачи.

Вопрос, можно решить данную проблему? 

Автор: Nickel 13.5.2006, 11:59
Ищи тег <a , потом ищи <img  или </a> если сначала встретится первое, то картинка - ссылка, если второе, то нет. 

Автор: ASGDeveloper 13.5.2006, 12:29
Цитата(Nickel @  13.5.2006,  11:59 Найти цитируемый пост)
Ищи тег <a , потом ищи <img  или </a> если сначала встретится первое, то картинка - ссылка, если второе, то нет. 

хм, я что-то не понял. Можешь привести пример?
Например есть:

<a href=download/file.zip title="Download Free Software"><img src=images/download.gif align=right width=141 height=34 border=0 alt="Download Free"></a>

и еще

<img src=images/box.gif width=150 height=182 alt="Software BOX" title="Software BOX"> 

Автор: Nickel 13.5.2006, 14:14
Вот как-то так...Конечно не совсем надёжно, но целый парсер я для тебя псиать не буду. Поищи могут быть ошибки. Смысл данного кода: ищем '<a ' и '</a' .
Код

uses strutils;

...

var s: string;
    apos, imgpos, a: integer;
begin
  s:='<a href=download/file.zip title="Download Free Software"><img src=images/download.gif align=right width=141 height=34 border=0 alt="Download Free"></a>';
  s:=s+'<img src=images/box.gif width=150 height=182 alt="Software BOX" title="Software BOX">';
  apos:=0;
  a:=0;
  imgpos:=pos('<img ',s);
  apos:=pos('a',s);
  while imgpos>0 do
    begin
      while (apos<imgpos) and (apos>0) do
        begin
          if s[apos-2]+s[apos-1]='</' then a:=a-1;
          if a<0 then a:=0;
          if (s[apos-1]='<') and (s[apos+1]=' ') then a:=a+1;
          apos:=posex('a',s,apos+1);
        end;
      if a>0 then showmessage('Êàðòèíêà, êîòîðàÿ íà÷èíàåòñÿ ñ '+inttostr(imgpos)+' ñèìâîëà - ññûëêà')
      else showmessage('Êàðòèíêà, êîòîðàÿ íà÷èíàåòñÿ ñ '+inttostr(imgpos)+' ñèìâîëà - íå ññûëêà');
      a:=0;
      apos:=posex('a',s,imgpos+1);
      imgpos:=posex('<img ',s,imgpos+1);
    end;
end;
 

Автор: Poseidon 13.5.2006, 23:24
Цитата(ASGDeveloper @  13.5.2006,  12:29 Найти цитируемый пост)
<a href=download/file.zip title="Download Free Software"><img src=images/download.gif align=right width=141 height=34 border=0 alt="Download Free"></a>
 Это ссылка, т.к. присетствует <a ...> ...  </a>

Цитата(ASGDeveloper @  13.5.2006,  12:29 Найти цитируемый пост)
<img src=images/box.gif width=150 height=182 alt="Software BOX" title="Software BOX"> 
 Это просто картинка.
 

Автор: ASGDeveloper 14.5.2006, 17:14
Цитата(Nickel @  13.5.2006,  14:14 Найти цитируемый пост)
Вот как-то так...Конечно не совсем надёжно, но целый парсер я для тебя псиать не буду.

Только плз, напиши, что значят эти: Êàðòèíêà, êîòîðàÿ íà÷èíàåòñÿ ñ  

Автор: Nickel 14.5.2006, 17:33
Ну не знал как сформулировать... Вобщем это номер символа '<' после которого идёт img 

Автор: ASGDeveloper 14.5.2006, 17:36
Цитата(Nickel @  14.5.2006,  17:33 Найти цитируемый пост)
Ну не знал как сформулировать... Вобщем это номер символа '<' после которого идёт img 

Ладно, все, спасибо! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)