среда, 2 февраля 2011 г.

Парсинг HTML

Как спарсить текст со страницы? Парсить будем стандартными функциями copy,pos. Сделаем get запрос, что бы получить html код страницы и начнем "парсить".
1. Добавьте компонент IdHTTP1 с вкладки Indy Clients. Отправим get запрос с помощью компонента.
Memo1.Text := idHttp1.Get('http://bash.org.ru/quote/11');


 
 2. Начинаем "парсить", для начала вытащим слово 'Войти',
<a href="http://mail.yandex.ru"onclick="c(this,17,1080)">Войти&nbsp;в&nbsp;почту</a> .
Начинаем с позиции  ' )"> ' до ' &nbsp '. Получается такой код:

var
Str: String; \\ в переменной str будет хранится результат 
begin
str := Copy(memo1.Lines.Text,Pos(' )"> ',memo1.Lines.Text) + 3, pos('   ',memo1.Lines.Text) - pos(')">',memo1.Lines.Text) - 3 );
           ShowMessage(Str); // выводим на экран сообщение.

3.  Приведу еще пример:
 Нужно вытащить текст Студия Артемия Лебедева.
<a href="http://www.artlebedev.ru"onclick="c(this,17,1084)">Студия Артемия&nbsp;Лебедева</a></p></td>
 Но у нас будем ответ, типо 'Студия Артемия&nbsp;Лебедева' а нужно 'Студия Артемия Лебедева'
 Есть функция   AnsiReplaceStr(Str, Text, Text1: String) - замена выражения Text на Text1 в строке str.
 То есть функцию напишем так   Str:=AnsiReplaceStr(Str, '&nbsp;',' '); и у нас получается:
procedure TForm1.Button2Click(Sender: TObject);
 var
 Str: String;
 begin
str := Copy(memo1.Lines.Text,Pos('84)">',memo1.Lines.Text) + 5, pos('</a>
',memo1.Lines.Text) - pos('84)">',memo1.Lines.Text) - 5 );
Str:=AnsiReplaceStr(Str, ' ',' ');
ShowMessage(Str);
end; end.
На сегодня все, надеюсь статья вам помогла освоить мой пример парсинга.
  

5 комментариев:

  1. Удобнее оформить это в виде функции. Будет удобнее в использовании.

    ОтветитьУдалить
  2. Узнал про функцию AnsiReplaceStr. Спасибо

    ОтветитьУдалить
  3. Alex, Можно и функцией, но новички наврятли изучили еще функцию..
    Рад что помог.

    ОтветитьУдалить
  4. Нууу.... Знакомиться с парсингом и не знать что есть функция как-то... не так :-)

    ОтветитьУдалить
  5. Согласен AnthonySoprano.
    В слудущий раз буду использовать функцию.
    Просто когда я интересовался парсингом я не знал даже что такое функция.. хех...

    ОтветитьУдалить

Сделай автору приятно - оставь комментарий!