Посоветуйте (а лучше поделитесь) пожалуйста компонент для парсинга HTML на Delphi (freeware или крякнутый ) Спасибо.
А компонентом для закатывания губ не поделиться? Или ты думаешь что есть компоненты для всех случаев жизни и тебе ничего вообще делать не надо будет никогда а тупо тока кидать компоненты на форму? 1) ручками парси. pos и copy еще не отменяли 2) html - считай упрощенный аналог xml так что как вариант какойнить xml парсер сможет тебе помоч 3) можно попробовать заюзать WebBrowser и через COM обращаться к элементам страницы. 4) любой двиг регулярных выражений.
на счет 3) пользуюсь IHTMLdocument2, но есть минусы, я пару раз вопросы по этому поводу поднимал, решить не смогли: 1) на некоторых сайтах вылазит крит ошибка dll'ек 2) на некоторых сайтах показывает "сообщение безопасности:сайт небезопасен", а если отключить всплывающие окна, то это сообщение пропадает, но начинают вылазить всплывающие окна))) Компоненты для парсинга находил, но они платные. Как вариант - написать самому, но к сожалению недостаточно знаю ООП чтобы написать хороший компонент, а писать г**но - только время зря тратить.
Используй функцию Code: function Pars(T_, ForS, _T: string): string; var a, b: integer; begin Result := ''; if (T_ = '') or (ForS = '') or (_T = '') then Exit; a := Pos(T_, ForS); if a = 0 then Exit else a := a + Length(T_); ForS := Copy(ForS, a, Length(ForS) - a + 1); b := Pos(_T, ForS); if b > 0 then Result := Copy(ForS, 1, b - 1); end;
Спасибо гуглу: Code: TSection = record Name, Value: String; end; TSectionArray = Array of TSection; TCustomParser = class fText: String; fSections: TSectionArray; private procedure SetText(const Value: String); function GetSectionCount: Integer; public property Text: String read fText write SetText; property Count: Integer read GetSectionCount; property Sections: TSectionArray read fSections write fSections; function GetSectionValue(Section: String): String; end; { TCustomParser } function TCustomParser.GetSectionCount: Integer; begin Result := Length(fSections); end; function TCustomParser.GetSectionValue(Section: String): String; Var i: Integer; begin for i := 0 to Length(fSections) - 1 do if fSections[i].Name = Section then begin Result := fSections[i].Value; Break; end; end; procedure TCustomParser.SetText(const Value: String); Var S: String; begin fText := Value; S := Value; SetLength(fSections, 0); while Pos('<', S) > 0 do begin SetLength(fSections, Length(fSections) + 1); Delete(S, 1, Pos('<', S)); fSections[High(fSections)].Name := Copy(S, 1, Pos('>', S) - 1); Delete(S, 1, Pos('>', S)); fSections[High(fSections)].Value := Copy(S, 1, Pos('</', S) - 1); Delete(S, 1, Pos('>', S)); end; end;
Какеола, ты конечно прости, но то что тебе выдал гугл - вообще НИ_О_ЧЕМ. Ты сам-то хоть код смотрел? Это тупо стринглист вида Name1=Value1; Name2=Value2; Name3=Value3; И где тут упоминается вообще HTML? А где, скажи на милость обращение к свойсву тега по имени свойства, что-то типа <table align="left" border="0" width="100%" cellspacing="0" cellpadding="0"> и я хочу узнать align, как мне при помощи твоего класса это сделать? И как это вообще использовать то? Скорее всего это кусок какого-то парсера, но далеко не весь...