Как спарсить текст со страницы? Парсить будем стандартными функциями 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)">Войти в почту</a> .
Начинаем с позиции ' )"> ' до '   '. Получается такой код:
3. Приведу еще пример:
Нужно вытащить текст Студия Артемия Лебедева.
<a href="http://www.artlebedev.ru"onclick="c(this,17,1084)">Студия Артемия Лебедева</a></p></td>
Но у нас будем ответ, типо 'Студия Артемия Лебедева' а нужно 'Студия Артемия Лебедева'
Есть функция AnsiReplaceStr(Str, Text, Text1: String) - замена выражения Text на Text1 в строке str.
То есть функцию напишем так Str:=AnsiReplaceStr(Str, ' ',' '); и у нас получается:
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)">Войти в почту</a> .
Начинаем с позиции ' )"> ' до '   '. Получается такой код:
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)">Студия Артемия Лебедева</a></p></td>
Но у нас будем ответ, типо 'Студия Артемия Лебедева' а нужно 'Студия Артемия Лебедева'
Есть функция AnsiReplaceStr(Str, Text, Text1: String) - замена выражения Text на Text1 в строке str.
То есть функцию напишем так Str:=AnsiReplaceStr(Str, ' ',' '); и у нас получается:
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.На сегодня все, надеюсь статья вам помогла освоить мой пример парсинга.
Удобнее оформить это в виде функции. Будет удобнее в использовании.
ОтветитьУдалитьУзнал про функцию AnsiReplaceStr. Спасибо
ОтветитьУдалитьAlex, Можно и функцией, но новички наврятли изучили еще функцию..
ОтветитьУдалитьРад что помог.
Нууу.... Знакомиться с парсингом и не знать что есть функция как-то... не так :-)
ОтветитьУдалитьСогласен AnthonySoprano.
ОтветитьУдалитьВ слудущий раз буду использовать функцию.
Просто когда я интересовался парсингом я не знал даже что такое функция.. хех...