[Delphi]Как выпарсить определенный код из страницы.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Kimimaru, 10 Aug 2011.

  1. Kimimaru

    Kimimaru New Member

    Joined:
    25 Jul 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    на странице сайта есть код 28ed35629540a8ad8308d2ed94621d25 ,как его извлечь ? Применить регулярку?
    Или как то по другому вот кусок кода страницы

    <input id="passwordkey" type="hidden" value="0ac124177979c922180dc30a677a56ae" />

    Буду благодарен желательно не давать готовый результат,а подсказать направление:) Надеюсь поймете

    ======
    интересует есть ли технология парсение инпутов
     
    #1 Kimimaru, 10 Aug 2011
    Last edited: 10 Aug 2011
  2. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    если именно инпуты парсить, то можно парсить через DOM страницы, или найти какой-нибудь HTML-парсер
     
  3. Kimimaru

    Kimimaru New Member

    Joined:
    25 Jul 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    Вот как данная технология называется в Delphi?
     
  4. Kimimaru

    Kimimaru New Member

    Joined:
    25 Jul 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    <input type="zuka" name="copyme" size="25" value="marsupilami">
    вот как извлечь отсюда значение ,объясните пожалуйста
     
  5. brain

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

    Joined:
    4 Jul 2010
    Messages:
    249
    Likes Received:
    90
    Reputations:
    33
    Code:
    function Parse(const tag1, tag2, source: string): TStrings;
    var
     p, p2, len: Integer;
    begin
     Result := nil;
     p := Pos(tag1, source);
     len := Length(tag1);
     p2 := PosEx(tag2, source, p + len + 1);
     if (p = 0) or (p2 = 0) then
        Exit;
     Result := TStringList.Create;
     while (p > 0) and (p2 > 0) do
      begin
         if p2 > p then
           Result.Add(Copy(source, p + len, p2 - p - len));
         p := PosEx(tag1, source, p2);
         p2 := PosEx(tag2, source, p + len + 1);
      end;
    end;
    Пример использования:
    Code:
    var
      strings: TStrings;
    begin
     strings := Parse('<a href="', '"', Memo1.Lines.Text);
     if strings <> nil then
      begin
        Memo2.Lines.AddStrings(strings);
        strings.Free;
      end;
    end;
     
  6. Kimimaru

    Kimimaru New Member

    Joined:
    25 Jul 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    А принцип работы с input? и получение значении
     
  7. brain

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

    Joined:
    4 Jul 2010
    Messages:
    249
    Likes Received:
    90
    Reputations:
    33
    Переделайте под свои инпуты.
     
  8. Kimimaru

    Kimimaru New Member

    Joined:
    25 Jul 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    я понял спасибо,но хочется не учиться шаблонно вставлять и называть себя программистом:) Интересно где об этом почитать можно т
     
  9. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Так непонятно что именно ты хочешь сделать? из 1 строчки получить значение, или иметь возможность со всей страницы получить значения, или еще чего-нибудь...
     
  10. Kimimaru

    Kimimaru New Member

    Joined:
    25 Jul 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    научиться получать значение из инпута,он может быть любим т.е. name допустим 911 ,а value 112,вот значение нужно получать
    <input id="passwordkey" type="hidden" value="0ac124177979c922180dc30a677a56ae" />
    видишь тут id passwordkey а значение код,мне нужно научиться по id или name получать значение
     
    #10 Kimimaru, 10 Aug 2011
    Last edited: 10 Aug 2011
  11. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    "О Регулярные Выражения Вы Могучи"
    Всё предельно просто :) берём - ТУТ качаем regexpr.pas, подключаем
    Code:
    uses regexpr;
    
    Пишу примерно. Если нам надо получить Value из input:
    Code:
    var
      RegExp : TRegExpr;
    begin
      RegExp := TRegExpr.Create;
      try
        RegExp.RegExp.InputString := '<input id="passwordkey" type="hidden" value="0ac124177979c922180dc30a677a56ae" />';
        if RegExp.Exec then
           begin
              Memo1.Lineas.Append(RegExp.Match[1]);
           end;
      finally
        RegExp.Free;
      end;
    end;
    Если надо получить из нескольких input'ов:
    Code:
    var
      RegExp : TRegExpr;
    begin
      RegExp := TRegExpr.Create;
      try
        RegExp.RegExp.InputString := '<input id="passwordkey" type="hidden" value="0ac124177979c922180dc30a677a56ae" />';
        if RegExp.Exec then// к статей тут можно указать текст или переменную типа - RegExp.Exec(List.Text), тогда InputString не нужен
           begin
              repeat
              Memo1.Lineas.Append(RegExp.Match[1]);
              until not RegExp.ExecNext;
           end;
      finally
        RegExp.Free;
      end;
    end;

    P.S. Должно работать, писал от руки прямо тут. Удачи. :rolleyes:
     
  12. xmadstyle

    xmadstyle Member

    Joined:
    29 Aug 2008
    Messages:
    91
    Likes Received:
    53
    Reputations:
    24
    Тебе уже все объяснили, что именно не понятно?
    Как получить код страницы? Можно например используя компонент Indy. Как пользоваться Indy знает google "Delphi GET POST Indy".
    Как извлечь определенный текст из кода страницы? Кури Pos(), Copy(), Delete(), Length(), или опять спроси у google "Delphi работа со строками".
    Конкретный пример для твоего случая:
    Code:
      x_src:=Copy(x_src,Pos('passwordkey',x_src)+34,32);
    где
    x_src - переменная типа string, которая содержит код страницы и в которую после выполнения этой строчки кода поместиться результат, в твоем случае это будет "0ac124177979c922180dc30a677a56ae"