Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 04.12.2014
Сообщений: 21
1

Парсинг

27.03.2015, 13:07. Просмотров 1334. Ответов 3
Метки нет (Все метки)


Всем привет!
Понадобилось пропарсить этот сайт:
Кликните здесь для просмотра всего текста
metal-radio.ru/group/rating

Все что нужно - это заходить на каждую страницу (по порядку) и копировать название, емайл и сайт.
Может кто то подсказать как это сделать?
Если все получится - не обижу =)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2015, 13:07
Ответы с готовыми решениями:

Парсинг
Пытаюсь спарсить ответ от сервера в Headers , но нету конца парса и как организовать такой парс ни...

парсинг
Здравствуйте. Признаться в парсинге не силен от того и столкнулся со следующей проблемой. Есть...

Парсинг
<tr class="event-name"> <td colspan="8"><span class="">26 / 2016</span>...

Парсинг
Я уже неоднократно задавл такой вопрос, но мне, к сожалению, никто не ответил. Для парсинга...

3
836 / 731 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
28.03.2015, 01:25 2
Цитата Сообщение от lokdess Посмотреть сообщение
Все что нужно - это заходить на каждую страницу (по порядку) и копировать название, емайл и сайт.
Это не все что нужно, нужно пробежать в цикле по 32 страницам, составить список названий групп, затем эти названия поставить в ссылку типа-
http://metal-radio.ru/hazard96

Затем зайти на каждую ссылку-группу написать кучу регулярок и снова парсить и парсить и парсить емайл и сайт
Потом поставить весь код в поток иначе все ужасно зависает.
Потом сохранить в html или txt всю работу.

Лови вот начало сделал! Процентов 10 сделал, дальше не хочу, долго очень делать.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
  r: TRegExpr;
  i, kol: Integer;
  parsgr: string; //сюда парсим группы со всех страниц
begin
for i := 1 to 3 do //сюда кол-во страниц с которых парсить
  parsgr:= parsgr + IdHTTP1.Get('http://metal-radio.ru/group/rating?page='+Inttostr(i));
 
  r := TRegExpr.Create;
  r.Expression := '<h3><a href="/.*?">(.*?)</a></h3>';
   r.InputString:= parsgr;
  if r.Exec then
  begin
    repeat
      Memo1.Lines.Add(r.Match[1]);
      kol:= kol + 1;
    until not r.ExecNext;
  end;
  Label1.Caption:='Найдено:  '+ IntToStr(kol)+ ' групп';
end;
0
Миниатюры
Парсинг  
пофигист широкого профиля
4288 / 2808 / 796
Регистрация: 15.07.2013
Сообщений: 16,295
28.03.2015, 02:10 3

Не по теме:

Цитата Сообщение от lokdess Посмотреть сообщение
Если все получится - не обижу =)
А если не получится - обидишь?

0
836 / 731 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
31.03.2015, 12:06 4
Лучший ответ Сообщение было отмечено lokdess как решение

Решение

Ты где там, лови свой код + исходник! С сохранением в html + css стили тебе в него добавил!
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
    TMyThread = class(TThread)
     private
     { Private declarations }
   protected
     procedure Execute; override;
   end;
 
var
  Form1: TForm1;
  htmlhead, htmlfoot: string; //верх и низ страницы
  List, List2: TStringList;
  MyThread: TMyThread;
  boolpotok: Boolean;
  kol, kol2, oshibok: Integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  boolpotok := True;
 
  MyThread:=TMyThread.Create(False);
  MyThread.Priority:=tpNormal;
end;
 
 
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  boolpotok := False;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 
   List := TStringList.Create;
   List2 := TStringList.Create;
 
    htmlhead :=
    '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"><html>' + #13#10 +
    '<head>' + #13#10 +
    '<META http-equiv="Content-Type" content="text/html; charset=windows-1251">' + #13#10 +
    '<title>metal-radio.ru Report</title>' + #13#10 +
    '<style type="text/css">' + #13#10 +
    'body { font-family:"Verdana",sans-serif; font-size:100%; background:#ffffff; color:#000000; cursor:default; }' + #13#10 +
    'body,table,td,h1,h2,hr { margin:0px; padding:0px; }' + #13#10 +
    'A:link, A:visited, A:active { color:#336699; }' + #13#10 +
    'A:hover { color:#003366; }' + #13#10 +
    'h1 { padding:16px 0px 8px 15px; border:#336699 0px solid; border-width:0px 0px 6px 0px; font-size:130%; font-weight:normal; background:#003366; color:#ffffff; }' + #13#10 +
    'h2 { margin:20px 0px 7px 5px; font-size:80%; }' + #13#10 +
    'table { border-collapse:collapse; }' + #13#10 +
    'table td { padding:3px 5px; }' + #13#10 +
    'div.center { margin:0px 10px; }' + #13#10 +
    '.delimiter { display:block; height:15px; overflow:hidden; }' + #13#10 +
    '.note { display:block; padding:0px 10px 0px 5px; font-size:70%; background:#ffffff; color:#0066DD; }' + #13#10 +
    '.footer { padding:15px 0px; border-top:4px solid #cccccc; }' + #13#10 +
    '.infotable { width:100%; font-size:70%; border-bottom:1px solid #e7e7ce; }' + #13#10 +
    '.infotable .header td { font-weight:bold; background:#cecf9c; border:1px solid #cecf9c; border-bottom:1px solid #ffffff; }' + #13#10 +
    '.infotable .content td { background:#e7e7ce; border:0px solid #ffffff; border-width:0px 1px; }' + #13#10 +
    '.infotable .foot-r { padding-right:10px; text-align:right; }' + #13#10 +
    '.infotable .foot-l { padding-left:10px; text-align:left; }' + #13#10 +
    '.infotable td.border-l { border-left:1px solid #e7e7ce; }' + #13#10 +
    '.infotable td.border-r { border-right:1px solid #e7e7ce; }' + #13#10 +
    '.infotable tr:hover { background:#f2f2f2; }' + #13#10 +
    '</style>' + #13#10 +
    '</head>' + #13#10 +
    '<body>' + #13#10 +
    '<h1>РЕЙТИНГ ГРУПП METAL-RADIO.RU</h1>' + #13#10 +
    '<div class="delimiter"></div>' + #13#10 +
    '<div class="center"><span class="note">' + DateTimeToStr(Now) +
    '</span><h2>Подробный отчето всех группах и e-mail с сайта "metal-radio.ru"</h2>' + #13#10 +
    '<div class="delimiter"></div>' + #13#10 +
    '<table width="70%" class="infotable">' + #13#10 +
    '<tr class="header">' + #13#10 +
    '<td colspan="2">ГРУППЫ METAL-RADIO.RU</td>' + #13#10 +
    '</tr>';
 
  htmlfoot :=
    '</table>' + #13#10 +
    '<div class="footer"><b class="note"><a href="http://metal-radio.ru/">metal-radio.ru</a></b></div>' + #13#10 +
    '</div>' + #13#10 +
    '</body>' + #13#10 +
    '</html>';
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  List.Free;
  List2.Free;
end;
 
procedure TForm1.Label8Click(Sender: TObject);
begin
  ShellExecute(Handle, nil, 'http://metal-radio.ru/group/rating?page=1', nil, nil, SW_SHOW);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  list2: TStringList;
begin
  List2 := TStringList.Create;
  list2.Add(htmlhead);
  list2.Add(List.Text);
 
  list2.Add(htmlfoot);
  list2.SaveToFile('log.html');
  list2.Free;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  boolpotok := False;
end;
 
{ TMyThread }
 
procedure TMyThread.Execute;
var
  r : TRegExpr;
  i, j: Integer;
  parsgr, parsdannie: string; //сюда парсим все
begin
  ///////////////////////// парсим группы ///////////////////////////////
  try
    for i := Form1.SpinEdit1.Value to Form1.SpinEdit2.Value do
    begin
      if boolpotok = True then
      begin
       Form1.Label4.Caption:='Страница: '+ IntToStr(i);
       parsgr:= Form1.IdHTTP1.Get('http://metal-radio.ru/group/rating?page='+Inttostr(i));
 
       r := TRegExpr.Create;
       r.Expression := '<h3><a href="/(.*?)">(.*?)</a></h3>';
       r.InputString:= parsgr;
        if r.Exec then
        begin
          repeat
           Form1.Memo1.Lines.Add(r.Match[2]);
           List2.Add(r.Match[1]);
           kol:= kol + 1;
           Form1.Label1.Caption:='Найдено:  '+ IntToStr(kol)+ ' групп';
          until not r.ExecNext;
        end;
        r.Free;
      end
      else
      Exit;
    end;
 
      /////////////////// парсим сайт и емаил ////////////////////////////////
    for j := 0 to Form1.Memo1.Lines.Count-1 do
    begin
      if boolpotok = True then
      begin
        parsdannie:= Form1.IdHTTP1.Get('http://metal-radio.ru/' + List2.Strings[j]);
 
        r := TRegExpr.Create;
        r.Expression := '<b>Сайт:</b> <noindex>(.*?)</noindex>.*?<b>e-mail:</b> (.*?)</a>';
        r.InputString:= parsdannie;
        if r.Exec then
        begin
          repeat
           ////////////////////// обработка таблицы html ////////////////////
           List.Add('<tr class="content">');
           List.Add('<td class="border-1" width="30%">'+Form1.Memo1.Lines[j]+'</td>');
           List.Add('<td width="70%"></td>');
           List.Add('</tr>');
 
           List.Add('<tr>');
           List.Add('<td class = "border - 1"> E-mail: </td>');
           List.Add('<td>' + r.Match[2] + '</td>');
           List.Add('</tr>');
 
           List.Add('<tr>');
           List.Add('<td class = "border - 1"> Сайт: </td>');
           List.Add('<td>' + r.Match[1]+'</a>' + '</td>');
 
           List.Add('</tr>');
           kol2:= kol2 + 1;
           Form1.Label2.Caption:='Обработано:  '+ IntToStr(kol2) + ', осталось:  ' + Inttostr(kol - kol2);
           until not r.ExecNext;
        end;
         r.Free;
      end
      else
      Exit;
    end;
 
    //сохранить в файл
    if (kol = kol2) and (Form1.CheckBox1.Checked) then
    Form1.Button2.Click;
  except
    oshibok:= oshibok + 1;
    Form1.Label3.Caption:= 'Ошибок: ' + IntToStr(oshibok);
  end;
end;
 
end.
0
Миниатюры
Парсинг  
Вложения
Тип файла: rar metal-radio.rar (572.2 Кб, 6 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2015, 12:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Парсинг
procedure TForm3.sButton5Click(Sender: TObject); var item, item2:ISuperObject; gid:string;...

Парсинг?!
Прошу вашей помощи. с реализацией 1 строки я разобрался. procedure TForm2.btn2Click(Sender:...

Парсинг
Мне нужно спарсить значения uid в этом коде страницы ...

Парсинг
Dозникла проблtма, срочно нужен кусок кода для массовой &quot;выдерки&quot; текста. Проще говоря: Имеем...

Парсинг PHP
На странице хтмл есть текст, ну с этим все понятно, я оформил, как надо. Все парсит копи, делит...

Парсинг JSON
Данный код выдает ошибку &quot;access violation at address 008d4b2c&quot; var s : string; Json:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.