Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2010, 21:28   #1
SAMY93
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 10
По умолчанию mail.ru parser

Здравствуйте! У меня есть проблема:не получается написать парсер.Вот сайт,откуда брать мейлы http://otvet.mail.ru/open/?pg=1.
Вот мой код
Код:
procedure TForm3.Button1Click(Sender: TObject);
var s,s1,l:string;i,j,k:integer;
begin
for j := 1 to 5 do //желаемое кол-во страниц
  for k := 1 to 20 do // число майлов на одной странице
     begin
s:=idhttp1.Get('http://otvet.mail.ru/open/?pg=inttostr(j)');
l:='http://www.mail.ru/agent?message&to=';
if pos(l,s)<>0 then begin
  s1:=copy(s,pos(l,s)+36,20);
  s1:=copy(s1,1,pos('.ru',s1)+2);
   end;
  memo1.Lines.Add(s1);

     end;

end;
Проблема в том, что очень маленькая скорость и некоторые мэйлы добавляются по нескольку раз. Помогите пожалуйста.
SAMY93 вне форума Ответить с цитированием
Старый 08.08.2010, 22:19   #2
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Скорость зависит от твоего интернета, компьютера, серверов mail.ru и библиотеки Indy, для начала замени что-то одно.
А чтобы мейлы не добавлялись по нескольку раз, при каждом добавлении проходитесь циклом по memo1.Lines, сравнивайте с текущим, и если нет совпадений - добавляйте.
ZaRDaK вне форума Ответить с цитированием
Старый 09.08.2010, 10:26   #3
SAMY93
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 10
По умолчанию

Спасибо, но чет у меня какая-то херня с этим получается. Вот что я дописал
Код:
procedure TForm3.Button1Click(Sender: TObject);
 var       s,s1,l:string;i,j,k:integer;
begin
for j := 1 to 5 do   begin
     for k := 1 to 20 do
     begin
 s:=idhttp1.Get('http://otvet.mail.ru/open/?pg='+inttostr(j));
l:='http://www.mail.ru/agent?message&to=';
if pos(l,s)<>0 then begin
  s1:=copy(s,pos(l,s)+36,pos('@',s));
  s1:=copy(s1,1,pos('.ru',s1)+2);
   end;
   memo1.lines.Add(s1);
   for I := 1 to memo1.Lines.Count - 1 do
     if memo1.lines[i]<>memo1.lines[i+1] then
            memo1.Lines.Add(s1);
    end;
end;

end;
Но все-равно не получается. Не могли бы вы мне помочь?

Последний раз редактировалось SAMY93; 09.08.2010 в 10:31.
SAMY93 вне форума Ответить с цитированием
Старый 09.08.2010, 11:45   #4
fAtliNg
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 12
По умолчанию

конечно делаешь очень хитро аж ппц..
я про эти строки:
Код:
s1:=copy(s,pos(l,s)+36,pos('@',s));
s1:=copy(s1,1,pos('.ru',s1)+2);
ну и ладно, потом подумаешь как можно это сделать легче... миллион переменных не лучший вариант...

Теперь самое главное, в s1 всегда будет один и тот же мейл записываться(первое вхождение). Поэтому как s1 добавили в мемо сразу нужно из s удалять кусок кода начиная с 1 символа и заканчивая позицией s1.

Код:
   for I := 1 to memo1.Lines.Count - 1 do
     if memo1.lines[i]<>memo1.lines[i+1] then
            memo1.Lines.Add(s1);
    end;
а это что такое? Если эта штука фильтрует повторы, то я Скотт Эдкинс.

Последний раз редактировалось fAtliNg; 09.08.2010 в 11:50.
fAtliNg вне форума Ответить с цитированием
Старый 09.08.2010, 12:00   #5
SAMY93
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 10
По умолчанию

Код:
   for I := 1 to memo1.Lines.Count - 1 do
     if memo1.lines[i]<>memo1.lines[i+1] then
            memo1.Lines.Add(s1);
    end;
а это что такое? Если эта штука фильтрует повторы, то я Скотт Эдкинс.[/QUOTE]

Я просто не понимаю,как это сделать.Вот и родилось это чудище.Помогите исправить пожалуйста.
SAMY93 вне форума Ответить с цитированием
Старый 09.08.2010, 12:28   #6
fAtliNg
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 12
По умолчанию

Берешь первый элемент, сравниваешь его с каждым другим, если есть совпадение, то удаляешь его. Берешь второй элемент делаешь тоже самое. И так до самого конца. Через два цикла. Ничего сложного..
fAtliNg вне форума Ответить с цитированием
Старый 09.08.2010, 12:32   #7
fAtliNg
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 12
По умолчанию

а можно все сразу сделать
как только получаешь s1, то в цикле s1 сравниваешь с каждой строкой из memo. Если совпадений нету, то добавляешь. Чтоб узнать есть совпадения или нету можно например взять переменную add: boolean. изначально присвоить ее к true, как только находится повтор - присваиваешь ее к false. а потом:
if add then
memo1.Lines.Add(s1);
fAtliNg вне форума Ответить с цитированием
Старый 09.08.2010, 12:53   #8
SAMY93
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 10
По умолчанию

Спасибо. Я уже сделал) Дошло до меня. Задумка моя в том, чтобы отпарсенные мэйлы сразу заносились в брут,который по мере добавления будет их брутить.
SAMY93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
php2xls com parser crazy horse PHP 0 08.10.2009 09:02
XML Parser Aynas Общие вопросы Delphi 3 09.08.2008 22:05
PHP vs Perl vs ASP vs Parser vs Other Mixasik PHP 3 21.07.2008 10:26