Мне в голову пришла мысль спарсить анекдоты с сайта. Что бы вытащить несколько анекдотов будем работать с циклом, и удалять старый анекдот парсить новый и до тех пор, пока не закончится строка.
Создадим функцию, назовем ParsingAnegdot объявим переменную GetTex в нее будет входит сам html код странице, результат будет типа String.
Заходим на страницу, смотрим между какими тегами будем парсить.
- <div class="text">
- <table class="votingbox" border="0">
Создадим функцию, назовем ParsingAnegdot объявим переменную GetTex в нее будет входит сам html код странице, результат будет типа String.
function TForm1.ParsingAnegdot(GetText: String): String; begin end;Теперь нам осталось описать функцию чем мы сейчас и займемся.
Объявим переменную Str тип String, там будет хранится результат(анекдота). Переменные p1,p2 тип Integer, будет хранится позиция тегов.
function TForm1.ParsingAnegdot(GetText: String): String;
var
str: String; // Результат
p1,p2: Integer; // Позиции поиска, Pos
begin
repeat
p1 := Pos('<div class="text">' ,GetText) + 18; // Позиция тега 1
p2 := Pos('<table class="votingbox" border="0">', GetText); // Позиция тега 2
Str := Copy(GetText,p1, p2 - Pos('<div class="text">' ,GetText) - 18 ); // Вытаскиваем под тегами, сам Анекдот
Memo1.Lines.Add(Str); // Добавляем анекдот с новой строки
Str := ''; // Обнуляем результат
Delete(GetText,1,p2); // Удалеем с начала html кода, до конца позиции анегдота
until Pos('<table class="votingbox" border="0">', GetText) = 0; // Ищим до тех пор пока теги найдены.
// Удаляем все не нужные теги.
Memo1.Lines.Text := AnsiReplaceText(Memo1.Lines.Text, '<br />', ' ');
Memo1.Lines.Text := AnsiReplaceText(Memo1.Lines.Text, '</div>', ' ');
Memo1.Lines.Text := AnsiReplaceText(Memo1.Lines.Text, '<br />', ' ');
Memo1.Lines.Text := AnsiReplaceText(Memo1.Lines.Text, '<div class="site">', ' ');
// Удаляем все не нужные теги.
end;
unit CLXMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StrUtils;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Memo1: TMemo;
IdHTTP1: TIdHTTP;
IdAntiFreeze1: TIdAntiFreeze;
procedure Button1Click(Sender: TObject);
function ParsingAnegdot(GetText: String): String;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
GetText: String;
begin
GetText := IdHttp1.Get('http://www.anekdot.ru/a/an1102/j110218;100.html');
ParsingAnegdot(GetText);
end;
function TForm1.ParsingAnegdot(GetText: String): String;
var
str: String; // Результат
p1,p2: Integer; // Позиции поиска, Pos
begin
repeat
p1 := Pos('<div class="text">' ,GetText) + 18; // Позиция тега 1
p2 := Pos('<table class="votingbox" border="0">', GetText); // Позиция тега 2
Str := Copy(GetText,p1, p2 - Pos('<div class="text">' ,GetText) - 18 ); // Вытаскиваем под тегами, сам Анекдот
Memo1.Lines.Add(Str); // Добавляем анекдот с новой строки
Str := ''; // Обнуляем результат
Delete(GetText,1,p2); // Удалеем с начала html кода, до конца позиции анегдота
until Pos('<table class="votingbox" border="0">', GetText) = 0; // Ищим до тех пор пока теги найдены.
// Удаляем все не нужные теги.
Memo1.Lines.Text := AnsiReplaceText(Memo1.Lines.Text, '<br />', ' ');
Memo1.Lines.Text := AnsiReplaceText(Memo1.Lines.Text, '</div>', ' ');
Memo1.Lines.Text := AnsiReplaceText(Memo1.Lines.Text, '<br />', ' ');
Memo1.Lines.Text := AnsiReplaceText(Memo1.Lines.Text, '<div class="site">', ' ');
// Удаляем все не нужные теги.
end;
end.


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