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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2010, 16:59   #1
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию Парсинг ссылки.

Всем привет, делаю свою первую попытку в написании парсера, пока дела плохи. Прошу объяснить как мне правильно спарсить ссылку на "мой мир" с данной страницы - _http://jd.mail.ru/user/4 .

Единственное упоминание о моём мире на этой странице, и на последующих тоже, это в этом куске кода

Код:
<div id="block-block-26" class="block block-block">
  
 
    
    <div><a href='http://my.mail.ru/inbox/falcon83/'><img src='http://avt.foto.mail.ru/inbox/falcon83/_avatar180'></a></div><div><center><a href='http://my.mail.ru/inbox/falcon83/'>Мой Мир</a></center></div>
 
 
 
</div>
у меня сейчас написано так
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
A:String;
mail:String;
begin
  idhttp1.Request.Host:='jd.mail.ru';
  idhttp1.Request.Accept:='application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
  idhttp1.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.3';
  idhttp1.Request.AcceptLanguage:='ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4';
  idhttp1.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3';
  idhttp1.Request.Connection:='keep-alive';
A:=idhttp1.Get('http://jd.mail.ru/user/4');
mail:=copy(A,POS('<TITLE><div id="block-block-26"</TITLE>Ìîé Ìèð', A)+8114,32);
RichEdit1.Text:=mail;
Ссылка прекрасно отображается в ричэдит, но как не сложно догадаться, при переходе например с _http://jd.mail.ru/user/4 на _http://jd.mail.ru/user/7 , копируется уже совершенно другие вещи.

Я не силён в программировании, и понимаю что в строке
Код:
mail:=copy(A,POS('<TITLE><div id="block-block-26"</TITLE>Ìîé Ìèð', A)+8114,32);
написана полная фигня, но именно поэтому я и прошу объяснить, как мне сделать так, что бы копировалась только то что мне нужно, а точнее отображалось в поочередно в RichEdit1. Парсер должен будет переходить со страницы на страницу, и искать ссылку на мой мир. Естественно что длина ссылок будет каждый раз разная, поэтому копирование по опреденной длине символов мне не подходит.

Я может не очень понятно объяснил суть проблемы, прошу прощения, первый раз обращаюсь за подобной помощью, пишите, если что, поправлюсь. Заранее, большое спасибо за помощь.
HmTH вне форума Ответить с цитированием
Старый 19.10.2010, 17:27   #2
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Может кто-то объяснить ?(
HmTH вне форума Ответить с цитированием
Старый 19.10.2010, 17:54   #3
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

Цитата:
должен будет переходить со страницы на страницу
сначала определитесь с какой на какую страницу
потом определите на тех страницах, не изменяется ли ссылка? и прошу сюда может чем подскажу
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 19.10.2010, 18:13   #4
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от grafgrial Посмотреть сообщение
сначала определитесь с какой на какую страницу
потом определите на тех страницах, не изменяется ли ссылка? и прошу сюда может чем подскажу
Страницы эти будут идти от 1 до 350000+ , то есть
Код:
http://jd.mail.ru/user/1
http://jd.mail.ru/user/2
http://jd.mail.ru/user/3
Ссылки на мой мир, естественно будут разные, так как на каждой странице, будут разные люди, соответственно окончание ссылок, а именно логин на конце сссылки, будет разный. Проблема с парсингом ссылок отпала, сделал так

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  HTTP : TIDHTTP;
  Tmp : TStringList;
  i : Integer;
  Ssilka : String;
begin
  Tmp := TStringList.Create;
  HTTP := TIdHTTP.Create(nil);
  HTTP.AllowCookies := True;
  HTTP.HandleRedirects := True;
  HTTP.Request.Host:='jd.mail.ru';
  HTTP.Request.Accept:='application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
  HTTP.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.3';
  HTTP.Request.AcceptLanguage:='ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4';
  HTTP.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3';
  HTTP.Request.Connection:='keep-alive';

  TMP.Text := HTTP.Get('http://jd.mail.ru/user/56');

  for I:=0 to Tmp.Count-1 do
    begin
      if Pos('my.mail.ru', Tmp[i])<>0 then
        begin
          Ssilka := Copy(Tmp[i], Pos('href='#39, Tmp[i])+6, Length(Tmp[i]));
          Ssilka := Copy(Ssilka, 0, Pos(#39'>', Ssilka)-2);
          memo1.Lines.Clear;
          memo1.Lines.Append(Ssilka);
        end;
    end;

end;

Но появилась новая проблема, как мне заставить программу, перебирать ссылки с 1 до 350к+ , что бы она начинала со страницы
Код:
http://jd.mail.ru/user/1
И закончила страницей
Код:
http://jd.mail.ru/user/350000
При этом выполняя код выше, то есть парсинг ссылки ? Может кто-то дописать код ? Буду крайне благодарен.
HmTH вне форума Ответить с цитированием
Старый 19.10.2010, 18:27   #5
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

что то вроде этого, пишу в слепую потому что у меня твой код не пашет :-(
Код:
var
  HTTP : TIDHTTP;
  Tmp : TStringList;
  i : Integer;
  Ssilka : String;
  num: integer;
begin
  Tmp := TStringList.Create;
  HTTP := TIdHTTP.Create(nil);
  for num:=1 to 35000 do
  begin
  HTTP.AllowCookies := True;
  HTTP.HandleRedirects := True;
  HTTP.Request.Host:='jd.mail.ru';
  HTTP.Request.Accept:='application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
  HTTP.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.3';
  HTTP.Request.AcceptLanguage:='ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4';
  HTTP.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3';
  HTTP.Request.Connection:='keep-alive';

  TMP.Text := HTTP.Get('http://jd.mail.ru/user/'+ Inttostr(num));

  for I:=0 to Tmp.Count-1 do
    begin
      if Pos('my.mail.ru', Tmp[i])<>0 then
        begin
          Ssilka := Copy(Tmp[i], Pos('href='#39, Tmp[i])+6, Length(Tmp[i]));
          Ssilka := Copy(Ssilka, 0, Pos(#39'>', Ssilka)-2);
          memo1.Lines.Clear;
          memo1.Lines.Append(Ssilka);
        end;
    end;
  end;
end;
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 19.10.2010, 18:36   #6
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Граф, спасибо, вроде бы работает, но как обычно, есть Но =)

Во первых не могу решить проблему вот с этой ошибкой, не подскажешь в чём может быть дело ? Гугл мне не особо помог в этом деле. Вот скрин
_http://i021.radikal.ru/1010/5d/a36fed09c6f7.jpg

Во вторых, как мне сделать, что бы ссылки не заменяли друг друга, а писались в столбик ?
HmTH вне форума Ответить с цитированием
Старый 19.10.2010, 18:40   #7
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

1) сам интересуюсь. у меня такая же ерунда
2)
Код:
memo1.Lines.Clear;
убери
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 19.10.2010, 18:43   #8
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от grafgrial Посмотреть сообщение
1) сам интересуюсь. у меня такая же ерунда
2)
Код:
memo1.Lines.Clear;
убери
1) Прога проходится по 1-3 ссылкам, и выдаёт ошибку.. один раз вообще 404 выдала...
2) Спасибо помогло.

Осталось только решить проблему с ошибкой, и прога вроде бы будет рабочей. Громадное спасибо за помощь, ща репы накидаю )

Может что-то тут неправильно, в HTTP.Request. ? Может такое быть ?

Последний раз редактировалось HmTH; 19.10.2010 в 18:46.
HmTH вне форума Ответить с цитированием
Старый 19.10.2010, 18:53   #9
grafgrial
Просто хороший
Форумчанин
 
Аватар для grafgrial
 
Регистрация: 26.03.2010
Сообщений: 562
По умолчанию

скинь исходник, посмотрю
Помог, нажми весы слева
grafgrial вне форума Ответить с цитированием
Старый 19.10.2010, 18:56   #10
HmTH
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от grafgrial Посмотреть сообщение
скинь исходник, посмотрю
http://www.sendspace.com/file/anjpfa
HmTH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг данных Shouldercannon Общие вопросы Delphi 2 09.07.2010 13:14
Парсинг статистики Shouldercannon Работа с сетью в Delphi 1 31.01.2010 11:53
Парсинг строки beemoto Общие вопросы Delphi 18 12.04.2009 18:52