Как правильно распарсить страницу

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как правильно распарсить страницу

Сообщение yante » 03.03.2024 12:38:45

Добрый день.
Я тут в первый раз - не ругайтесь пожалуйста, если что не так...
Итак, я нашел код и считываю страницу https://mingkh.ru/rating/krasnodarskiy- ... orossiysk/ ( или любые другие города ), там есть блоки ( взят случайный фрагмент страницы, выгруженной в файл )
<tr>
<td>7&nbsp;<span class="label label-xs label-green pull-right">УК</span></td>
<td><a href="/krasnodarskiy-kray/krasnodar/1112311002759/">УК «Профи Сервис»</a></td>
<td>50</td>
<td>179 489</td>
<td>6</td>
<td>проезд. Ангарский, д. 17</td>
<td>8 (918) 262-25-30</td>
</tr>

при этом я получаю строки ( до знака "=" - моя инфа для отладки )
nlist[i].[ii1].[ii2].[ii3].[ii4] = 2 / 44 / 1 / 44 УК,
nlist[i].[ii1].[ii2].[ii3].[ii4] = 2 / 44 / 2 / УК «Эксперт»,
nlist[i].[ii1].[ii2].[ii3].[ii4] = 2 / 44 / 3 / 13,
nlist[i].[ii1].[ii2].[ii3].[ii4] = 2 / 44 / 4 / 58 323,
nlist[i].[ii1].[ii2].[ii3].[ii4] = 2 / 44 / 5 / 15,
nlist[i].[ii1].[ii2].[ii3].[ii4] = 2 / 44 / 6 / р-н. Центральный, ул. Севастопольская, д. 25, офис 5,
nlist[i].[ii1].[ii2].[ii3].[ii4] = 2 / 44 / 7 / 8 (8622) 91-09-23,

А вот ссылка из второй строки - теряется...
Как до нее можно достучаться, может, кто подскажет?
Заранее спасибо...

Да, код такой:
readhtmlfile(doc, tstringstream.Create(tmpStr)); // tmpStr - строка, в которую считана страница
nlist := doc.GetElementsByTagName('div');
for i := 0 to nlist.Count - 1 do begin
if (tdomelement(nlist[i]).GetAttribute('class') = 'table-responsive margin-top-20') then begin
for ii1:=0 to nlist[i].ChildNodes.Count-1 do begin
...
yante
незнакомец
 
Сообщения: 4
Зарегистрирован: 10.12.2020 12:54:53

Re: Как правильно распарсить страницу

Сообщение Lucifer » 07.03.2024 19:04:01

Например, вот так:
1. Подключаем модуль RegExpr в uses.
2. Пишем код:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
const
  st: String = ' <td><a href="/krasnodarskiy-kray/krasnodar/1112311002759/">УК «Профи Сервис»</a></td>';
var
  res: String;
  RegExp: TRegExpr;
begin
  RegExp := TRegExpr.Create('href="(.+?)>');
  if RegExp.Exec(st) then
    res := RegExp.Match[1];
  ShowMessage(res);
end; 

3. Профит!
Lucifer
постоялец
 
Сообщения: 121
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 8

Рейтинг@Mail.ru