Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
1 / 1 / 1
Регистрация: 04.08.2011
Сообщений: 228

Парсинг сайта

02.09.2011, 20:07. Показов 5118. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть пару вопросиков
1) Как сделать чтобы программы читала юникод?? Допустим ник состоит из юникода. но прога его не читает( Команда
Delphi
1
UTF8Encode
не пашет
2)
Delphi
1
2
3
4
5
6
7
8
ssilka4:=('http://'+Edit3.text+'.darkorbit.bigpoint.com/indexInternal.es?action=internalClan');
  Listbox1.Items.text:=idhttp1.Get(ssilka4);
  s4:=Copy(ssilka4,Pos('clan-info-2nd',ssilka4)+1,Length(ssilka4));
  Delete(s4,Pos('</div>',s4),Length(s4));
   if Pos('clan-info-2nd', ssilka4)<>0 then
 memo1.Lines.Add('Ошибка!')
 else
  memo1.Lines.Add('Всё норм:'+(s4));
Что не так в коде??
Он должен парсить строчку между clan-info-2nd и </div>
Если он не находит то пишет Ошибка!
А если находит он мне не показывает строчку, а показывает ссылку
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2011, 20:07
Ответы с готовыми решениями:

Парсинг с сайта
Привет! Подскажите пожалуйста, как организовать парсинг например со страницы ...

Парсинг сайта
В куске htmt кода имеется следующий текст &lt;tr&gt; &lt;td colspan=3&gt;Курс Банка России на 08.03.12&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td...

Парсинг ссылок сайта
Здравствуйте. Хочу получить из страницы сайта все ссылки на его новости (их 10 штук). Пишу такой код: procedure...

40
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
02.09.2011, 20:45
UTF8ToAnsi
либо
UTF8ToString
Второй вариант, если юзаешь RAD-студию...

Добавлено через 3 минуты
Поразмысли, что ты тут написал:
Delphi
1
s4 := copy(ssilka4, pos('clan-info-2nd', ssilka4) + 1, length(ssilka4));
Второй аргумент может и не существовать, а третий аргумент функции - длина копируемого текста. Код будет правильный только в том случае, если pos('clan-info-2nd',ssilka4) + 1 даст нам единичку...

Добавлено через 9 минут
Я бы сделал так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  p1, p2: Integer;
  //...
begin
  p1 := pos('clan-info-2nd', ssilka4);
  p2 := pos('</div>', ssilka4);
  If (p1 > 0) and (p2 > 0) then
    begin
      p1 := p1 + length('clan-info-2nd');
      // вполне вероятно, в третьем параметре единичку и не надо прибавлять:
      s4 := copy(ssilka4, p1, p2 - p1 + 1);
    end;
end;
Хотя я не совсем понял, что ты хочешь...
1
1 / 1 / 1
Регистрация: 04.08.2011
Сообщений: 228
02.09.2011, 20:55  [ТС]
ну так что мне делать??
HTML5
1
<div class="clan-info-2nd">Бебебе</div>
Вот так выглядит исходник с сайта
Прога ищет слова clan-info-2nd по идее она должна прибавлять 15 символов
Потом ищет </div> и копирует между ними слово Бебебе
Но иногда в исходнике этого
HTML5
1
<div class="clan-info-2nd">Бебебе</div>
нет
А если этого нет программа должна выдать Ошибка
А есть ещё простенький метод парсинга???
Знаю что можно через RegExpr но он сложный для меня
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
02.09.2011, 20:56
Ну, как я написал, так и попробуй...
0
1 / 1 / 1
Регистрация: 04.08.2011
Сообщений: 228
02.09.2011, 22:04  [ТС]
не пашет
0
glook
03.09.2011, 13:12
Цитата Сообщение от ZverBlin Посмотреть сообщение
Знаю что можно через RegExpr но он сложный для меня
Парсинг регулярками проще чем ты думаешь. Вот почитай http://tdlite.ru/delphi/coregexpr

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TfrmMain.FormCreate(Sender: TObject);
var
RegExp: TRegExpr;
begin
 RegExp := TRegExpr.Create;
 RegExp.InputString := 'bla bla <div class="clan-info-2nd">Бебебе</div> bla bla';
 RegExp.Expression := '<div class="clan-info-2nd">(.*?)<';
 if RegExp.Exec then
 begin
  ShowMessage(RegExp.Match[1]); {"Бебебе"}
 end
 else
 begin
  ShowMessage('Ошибка');
 end;
 RegExp.Free;
end;
1 / 1 / 1
Регистрация: 04.08.2011
Сообщений: 228
04.09.2011, 19:21  [ТС]
ещё вопрос
смотрите есть 3 Edit для ввода
Логин Пароль Сервер
Допустим если мы ввели в Edit Сервер ru
то он парсил по одному способу
Если ввели eng то парсил по второму способу
Дело в том что на разных серверах немного измёнён исходный код и поэтому программа поддерживает тока определённые сервера где код настроен под них

Добавлено через 20 часов 46 минут
что не так в коде??
Парсит только Прометиум:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button7Click(Sender: TObject);
var  RegExp: TRegExpr;
ssilka5: string;
begin
 listbox1.Clear;
  ssilka5:='http://'+Edit3.text+'.darkorbit.bigpoint.com/indexInternal.es?action=internalSkylab';
  listbox1.Items.text:=Utf8ToAnsi(idhttp1.Get(ssilka5));
  RegExp := TRegExpr.Create;
 RegExp.InputString := 'Delphi <span class="ore_prometium">Прометиум:</span><br/>105.600</div> ';
 RegExp.Expression := 'ore_prometium">(.*?)</span><br/>(.*?)</div>';
 if RegExp.Exec then
 repeat
  Listbox3.Items.add(RegExp.Match[1]);
 until not RegExp.ExecNext;
 RegExp.Free;
 end;
HTML5
1
2
3
4
5
<div id="view_prometium" class="view_generally">
        <div id="view_prometium_stock">
            <span class="ore_prometium">Прометиум:</span><br />
            105.600
        </div>
0
glook
05.09.2011, 15:32
Попробуй так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button7Click(Sender: TObject);
var  RegExp: TRegExpr;
ssilka5: string;
begin
 listbox1.Clear;
  ssilka5:='http://'+Edit3.text+'.darkorbit.bigpoint.com/indexInternal.es?action=internalSkylab';
  listbox1.Items.text:=Utf8ToAnsi(idhttp1.Get(ssilka5));
  RegExp := TRegExpr.Create;
 RegExp.InputString := 'Delphi <span class="ore_prometium">Прометиум:</span><br/>105.600</div> ';
 RegExp.Expression := 'ore_prometium">(.*?)</span><br/>(.*?)</div>';
 if RegExp.Exec then
 repeat
  Listbox3.Items.add(RegExp.Match[1]); {Прометиум}
  Listbox3.Items.add(RegExp.Match[2]); {105.600}
 until not RegExp.ExecNext;
 RegExp.Free;
 end;
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 40
06.09.2011, 13:05
Помогите с регуляркой, есть текст
HTML5
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
 <div id="tab1" class="good_panel">
    <p>TM ERGO продолжает радовать поклонников своей техники стильными и многофункциональными устройствами!</p>
<p>Очередной такой новинкой стал GPS навигатор Ergo&nbsp;850, который объединил в себе все, что нужно современному водителю!&nbsp; <br />
 
&nbsp;<br />
Новинка имеет большой&nbsp;5 дюймовый дисплей, благодаря которому можно с наибольшим удобством пользоваться картой, а также просматривать фото и любимые фильмы.&nbsp;<br />
<br />
Благодаря установленной лицензионной карте Navitel, Ergo&nbsp;850 имеет общее маршрутное покрытие по всей Украине, а также.<br />
&nbsp;</p>
<p style="text-align: center"><img style='border: 10px solid white;' alt="Ergo 850" width="300" height="229" src="/sm/site/fileslibrary/shop/Ergo/Ergo-850_300.jpg" /></p>
<p><br />
<strong>Основные характеристики:</strong></p>
<ul>
    <li>Процессор: Mediatek 3351/468 MHz</li>
 
    <li>Функиц поддержки пробки</li>
    <li>Оперативная память: 128 MB</li>
    <li>Поддержка карт памяти microSD</li>
    <li>Широкоформатный 5&quot; дисплей с расширением 800x480 пикселей</li>
    <li>BlueTooth</li>
 
    <li>Операционная система: Windows CE 5.0</li>
    <li>Поддерживаемые форматы: Видео: WMV, MPEG, MPG, MP4, 3GP, ASF, AVI<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Фото: JPG, JPEG, BMP, PNG<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Аудио: WMA, MP3, WAV</li>
</ul>
 
 
  </div>
из него надо вытащить все что находится между тегами
HTML5
1
 <div id="tab1" class="good_panel"></div>
Заранее всем благодарен
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
06.09.2011, 13:22
<div id="tab1" class="good_panel"> встречается 1 раз или может несколько раз встретиться в коде?

Добавлено через 11 минут
вот такой шаблон будет
Delphi
1
reg.Expression:='(class="good_panel">)(.+?)(</div>)';
Добавлено через 36 секунд
в reg.Match[2] будет содержаться то что тебе нужно
1
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 40
06.09.2011, 15:48
Цитата Сообщение от anonimus Посмотреть сообщение
<div id="tab1" class="good_panel"> встречается 1 раз или может несколько раз встретиться в коде?

Добавлено через 11 минут
вот такой шаблон будет
Delphi
1
reg.Expression:='(class="good_panel">)(.+?)(</div>)';
Добавлено через 36 секунд
в reg.Match[2] будет содержаться то что тебе нужно
Не работает шаблончик, чето ничего не находит
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
06.09.2011, 15:51
Цитата Сообщение от alexmir Посмотреть сообщение
Не работает шаблончик, чето ничего не находит
покаж код, как ты его применяешь?
0
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 40
06.09.2011, 17:48
Цитата Сообщение от anonimus Посмотреть сообщение
покаж код, как ты его применяешь?
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  StdCtrls, RegularExpressions;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Button2: TButton;
    IdHTTP1: TIdHTTP;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  s:string;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=idhttp1.Get(edit1.Text);
memo1.Text:=s;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  Reg: TRegEx;
  M: TMatchCollection;
  i:integer;
  begin
  Reg := TRegEx.Create(Edit2.Text,[roIgnoreCase, roMultiLine]);
  if Reg.IsMatch(s) then
  begin
    M:=Reg.Matches(Memo1.Lines.Text);
    for i := 0 to M.Count-1 do
    begin
     Memo2.Lines.Add(M[i].Groups.Item[1].Value+' '+M[i].Groups.Item[2].Value)
    end;
  end;
end;
 
 
end.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
06.09.2011, 18:23
это кто тебя учил так работать с TRegExpr ?
0
06.09.2011, 18:26

Не по теме:

:rofl: :rofl: :rofl:
Без слёз эту тему нельзя читать :D

0
0 / 0 / 0
Регистрация: 11.11.2009
Сообщений: 40
06.09.2011, 18:27
Цитата Сообщение от anonimus Посмотреть сообщение
это кто тебя учил так работать с TRegExpr ?
Просторы интернета , просто ссылки таким макаром нормально считывает а вот текст чето не хочет. Раскажи плиз че не так делаю?
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
06.09.2011, 19:28
Delphi
1
2
3
4
5
6
reg:TRegExpr;
.............
reg:=TRegExpr.Create;
reg.Expression:='шаблон регулярки';
if reg.Exec(твой html код) then begin
// тут делай все что нужно с результатом, он будет в reg.Match[2] (если ты мой шаблон будешь применять)
1
1 / 1 / 1
Регистрация: 04.08.2011
Сообщений: 228
06.09.2011, 22:10  [ТС]
а что означает reg.Match[2]
вот эти цифры в скобочках 2, и т.д
как я понял это какой по счёту (.*?)
Вот
Delphi
1
RegExp.Expression := 'ore_prometium">(.*?)</span><br/>(.*?)</div>';
их тут два
первый после ore_prometium">(.*?)
второй <br/>(.*?)
Значит мы будем брать оттуда слова и добавлять их в Memo допустим
Memo1.Lines.add(RegExp.Match[1])- первое слово
Memo1.Lines.add(RegExp.Match[2])- второе слово
Правильно я понял???

anonimus мне написал код

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button2Click(Sender: TObject);
  var  reg:TRegExpr;
begin
reg:=TRegExpr.Create;
reg.Expression:='(<td class="labels")[>]([^<]+)(.+?)(<td class="values">)([^<]+)|(<td class="labels"><a)[^>]+[>]([^<]+)(.+?)(<td class="values">)([^<]+)';
if reg.Exec(ListBox1.Items.text) then
repeat
if reg.Match[2]<>'' then
Memo1.Lines.add(reg.Match[2]+' - '+reg.Match[5])
else
Memo1.Lines.add(reg.Match[7]+' - '+reg.Match[10]);
until not reg.ExecNext;
 
reg.Free;
end;
И меня интерисует эта строчка
Delphi
1
reg.Expression:='(<td class="labels")[>]([^<]+)(.+?)(<td class="values">)([^<]+)|(<td class="labels"><a)[^>]+[>]([^<]+)(.+?)(<td class="values">)([^<]+)';
Очень тут много всего что я уже запутался с ней
Можно какнить попроще её написать??
И что означают [>]([^<]+)
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
06.09.2011, 22:18
Цитата Сообщение от ZverBlin Посмотреть сообщение
мне написал код
задавай вопросы тому кто писал

Добавлено через 1 минуту
Цитата Сообщение от ZverBlin Посмотреть сообщение
И что означают [>]([^<]+)
[>] = >
([^<]+) - хотя бы один символ не являющейся <

Добавлено через 3 минуты
Цитата Сообщение от ZverBlin Посмотреть сообщение
Можно какнить попроще её написать??
ты лучше напиши что и откуда ты хочешь вытащить, тогда скажу можно проще или нет
0
1 / 1 / 1
Регистрация: 04.08.2011
Сообщений: 228
06.09.2011, 23:16  [ТС]
HTML5
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
 <tr>
        <td width="140px"><strong>Прометиум</strong></td>
        <td width="76px">3.555.299</td>
        <td width="54px"><span>+-0</span></td>
    </tr>
    <tr>
        <td><strong>Эндуриум</strong></td>
        <td>3.555.299</td>
        <td><span>+-0</span></td>
    </tr>
    <tr>
        <td><strong>Тербиум</strong></td>
        <td>3.555.299</td>
        <td><span>+-0</span></td>
    </tr>
    <tr>
        <td><strong>Прометид</strong></td>
        <td>998.703</td>
        <td><span>+-0</span></td>
    </tr>
    <tr>
        <td><strong>Дураниум</strong></td>
        <td>998.703</td>
        <td><span>+-0</span></td>
    </tr>
    <tr>
        <td><strong>Промериум</strong></td>
        <td>99.870</td>
        <td><span style="color: #69bf67">+2081</span></td>
    </tr>
    <tr>
        <td><strong>Сепром</strong></td>
        <td>5.299</td>
        <td><span>+-0</span></td>
    </tr>
</table>
Вытащить все русские слова и цифры
И как время вытащить
HTML5
1
<div class="hall_info" id="remainingTime_1">1:58:51</div>
Изображения
 
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2011, 23:16
Помогаю со студенческими работами здесь

Парсинг прокси с сайта
Написал не большой прокси парсер по ссылкам. Все работает как надо, прокси парсит. Но не хочет парсить прокси вот это этой ссылки....

Парсинг сайта (теги div)
Здравствуйте, прошу помочь с парсингом сайта который состоит из множества тегов div содержащих в себе разные значения, и мне нужно вытащить...

Числовой парсинг строк с сайта
Увожаемые форумчане! Помогите написать программу для поиск чисел с длиной 9 символов. Мне надо произвести поиск по номерам с длиной...

Парсинг с сайта через WebBrowser
Нужно спарсить прокси с одного сайта. Там стоит похоже защита от DDOS поэтому обычными методами не работает. Получается получить список...

Парсинг html кода с сайта tchromium
Уже 4 день подряд пытаюсь написать программу которая копировала б html код с сайта в мемо с помощью tchromium .Если не сложно...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru