Парсинг HTML в Delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by a1nt, 26 Dec 2006.

  1. a1nt

    a1nt Elder - Старейшина

    Joined:
    16 Dec 2005
    Messages:
    131
    Likes Received:
    39
    Reputations:
    25
    В TStrings находится документ HTML.
    В нем присутствует такое

    HTML:
    <td class="name"><a href="http://ссылка.ру">Какято лажа написана</a><small>Тут еще фигня, теги</small></td>
    Оно повторяется много раз, причем может быть, что в одной строке несколько. Мне нужно из этой конструкции вытащить ссылки (http://ссылка.ру).
    Запихнуть надо их в TStrings.
    Как это можно реализовать попроще,
    помогите, пжлст)
     
    #1 a1nt, 26 Dec 2006
    Last edited: 26 Dec 2006
  2. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    проще всего это пишеться на Php !
    так че думай.... есле че могу помочь на php сделать!
    делфи я не знаю.
     
  3. a1nt

    a1nt Elder - Старейшина

    Joined:
    16 Dec 2005
    Messages:
    131
    Likes Received:
    39
    Reputations:
    25
    Спасибо, конечно, но программа уже практически готова (чуть не сдох!), да и должна быть на компилируемом языке.
    Я тут подумал... Есть же инструменты парсинга XML, нелязя ли выполнить эту задачу с их помощью?
     
  4. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    знакомся: php2exe )))
     
  5. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Вот.должно помочь http://www.mytempdir.com/1135328
     
    2 people like this.
  6. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    Гема Шумахер, блин... только, что написал. А нет, надо опередить...
     
    3 people like this.
  7. a1nt

    a1nt Elder - Старейшина

    Joined:
    16 Dec 2005
    Messages:
    131
    Likes Received:
    39
    Reputations:
    25
    Спасибо. Но плиз, объясни, как сделать, чтобы он в одной строке искал несколько раз?
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i : integer;
    s : string;
    begin
    For i := 0 to memo1.Lines.Count - 1 do begin
    s  := memo1.Lines.Strings[i];
    if pos('<td class="name"><a href',s) <> 0 then begin
    s  := copy(s,pos('<td class="name"><a href=',s)+26,length(s));
    s  := copy(s,0,pos('">',s)-1);
    memo2.Lines.Add(s);
    end;
    end;
    end;
    Потому что он находит первую ссылки и выводит, а мне надо несколько из каждой строки. (((
     
  8. a1nt

    a1nt Elder - Старейшина

    Joined:
    16 Dec 2005
    Messages:
    131
    Likes Received:
    39
    Reputations:
    25
    О! Нашел проект http://www.regexpstudio.com
    Видимо очень удобная вещь. Взял пример по вытаскиванию мыльников из Tstrings. Только вот что-то не глотает мое выражение
    '\<td class\=\"name\"\>\<a href=\"'+'[_a-zA-Z\d\-\.]'+'\"\>'
    вроде все что может мешать заэкранировал, посмотрите, плииз. Если заставлю это работать будет вообще малина. Буду искать такие же строки, а потом функцией gemaglabin`а выдергивать ссылки.
    Как я понимаю язык выражений аналогичен Perl/PHP.
     
  9. a1nt

    a1nt Elder - Старейшина

    Joined:
    16 Dec 2005
    Messages:
    131
    Likes Received:
    39
    Reputations:
    25
    <td class="name"><a href="(.*)">
    Вот чего надумал. Но почему-то возвращает с переводами строки на прбелах
     
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Нельзя.
    Легко с помощью регекспов.
     
  11. a1nt

    a1nt Elder - Старейшина

    Joined:
    16 Dec 2005
    Messages:
    131
    Likes Received:
    39
    Reputations:
    25
    Да я уже понял... Только вот, что-то не выходит...
     
  12. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    Вот за основу взят Гемин, пример, чтобы по сто раз не писать. На-ка вот.

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i : integer;
    s,link : string;
    begin
    memo2.Lines.Clear;
    For i := 0 to memo1.Lines.Count - 1 do begin
    s := memo1.Lines[i];
    while pos('<a href',s) <> 0 do begin
    s := copy(s,pos('<a href=',s)+9,length(s));
    link := copy(s,0,pos('">',s)-1);
    memo2.Lines.Add(link);
    s:=copy(s,pos('">',s),length(s));
    end;
    end;
    end;
    end.
     
  13. a1nt

    a1nt Elder - Старейшина

    Joined:
    16 Dec 2005
    Messages:
    131
    Likes Received:
    39
    Reputations:
    25
    Спасибо запомощь но проблему уже решил.
    Используя регексы выдергивал нужные теги, а потом той же функцией вытягивал ссылки.