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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2014, 16:29   #1
mogo
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 40
По умолчанию Парсинг

Мне нужно со страницы спарсить все значения которые находятся в <id></id>

Например:

<id>1</id>
<id>2</id>

Нужно спарсить 1 и 2
mogo вне форума Ответить с цитированием
Старый 12.02.2014, 17:01   #2
Malriser
xor esp, esp
Форумчанин
 
Регистрация: 11.02.2014
Сообщений: 135
По умолчанию

Какие наработки то есть?

Контент страницы получили уже? Так как я помочь с контентом не могу, могу только с парсингом.

Код:
function parse(str:string) : integer;
var
  n, i:integer;
  tmp:string;
begin
  n:=pos('<id>', str);
  if (n = 0) then
    begin
      result:=-1;
      exit;
    end;
  n:=n + 4;
  tmp:='';
  while(str[n] <> '<') do
    begin
      tmp:=tmp + str[n];
      inc(n);
    end;
  result:=strtoint(tmp);
end;

Вот держи братюнь. Возвращает integer значение между id

Если <id> не найден, то возвращает -1

Пример использования:

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function parse(str:string) : integer;
var
  n, i:integer;
  tmp:string;
begin
  n:=pos('<id>', str);
  if (n = 0) then
    begin
      result:=-1;
      exit;
    end;
  n:=n + 4;
  tmp:='';
  while(str[n] <> '<') do
    begin
      tmp:=tmp + str[n];
      inc(n);
    end;
  result:=strtoint(tmp);
end;

var
s:string;
id:integer;
begin

repeat
  readln(s);
  id:=parse(s);
  writeln(id);
until 1<>1;
end.


Местоположение id неважно, хоть так:

bla bla bla<id>1</id>hahahaha

вернет 1

Главное, что бы было закрытие </id> и открытие <id>
Malriser вне форума Ответить с цитированием
Старый 12.02.2014, 17:01   #3
mogo
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 40
По умолчанию

и еще вот например спарсили все это в переменную "admin" как теперь по 1 значению вставлять в ссылку. Например http://sayt.ru/Admin.php?+admin и так по очереди вставлять это все.
mogo вне форума Ответить с цитированием
Старый 12.02.2014, 17:04   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Регуляркой:
<id>[\d{?}]</id>
Человек_Борща вне форума Ответить с цитированием
Старый 12.02.2014, 17:10   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от mogo Посмотреть сообщение
и еще вот например спарсили все это в переменную "admin" как теперь по 1 значению вставлять в ссылку. Например http://sayt.ru/Admin.php?+admin и так по очереди вставлять это все.
список+цикл, основы же блин...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.02.2014, 17:20   #6
mogo
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 40
По умолчанию

Вот смотрите пример:

Код:
html2:=http.Get('https://api.vk.com/method/groups.get?uids='+uid+'&filter=admin&access_token='+token);
html2:=StringReplace(html2, '[', ',',[rfReplaceAll, rfIgnoreCase]);
html2:=StringReplace(html2, ']', ',',[rfReplaceAll, rfIgnoreCase]);
html2:=StringReplace(html2, ',', ':;',[rfReplaceAll, rfIgnoreCase]);
end;
begin
reg3:=tregexpr.Create;
reg3.Expression:=';(.*?):';
if reg3.Exec(html2) then repeat
prx3.Add(reg3.Match[1]);
until
not
reg3.Execnext;
prx3.Text:=trim(prx3.Text);
if prx3.Count>0 then
begin
for i := 0 to prx3.Count-1 do
begin
html3:=http.Get('https://api.vk.com/method/groups.getById?gids='+prx3[i]+'&fields=members_count&access_token='+token);
bars.Add('Link: http://vk.com/club'+prx3[i]);
bars.Add('Name groups: '+pars('"name":"' , html3 ,'"'));
bars.Add('Member: ' + pars('"members_count":',html3, ',')) ;
bars.Add('Stats: http://vk.com/stats?gid='+prx3[i]);
bars.Add('------------');
end;
end else
bars.Add('Нет групп');
end;
end;
Мне нужно так же только на синапсе. Кто может помочь?
mogo вне форума Ответить с цитированием
Старый 12.02.2014, 17:26   #7
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

mogo Я думаю, ты сам себе сможешь помочь, по тому что замена инди на синапс, это настолько элементарнейшая задача, что аж стыдно её обсуждать.
doktor255 вне форума Ответить с цитированием
Старый 12.02.2014, 17:26   #8
mogo
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 40
По умолчанию

Только у меня не много по другому, вот пример старницы:

Код:
<response list="true">
<id>1</id>
</response>
Получить все что в <id></id> и подставить все значения к ссылкам.
mogo вне форума Ответить с цитированием
Старый 12.02.2014, 17:31   #9
mogo
Пользователь
 
Регистрация: 12.02.2014
Сообщений: 40
По умолчанию

Точней не много не так.

Код:
<response list="true">
<id>1</id>
</response>
Получить все что в <id></id> и подставьте значения к ссылкам и переходить по ним по очереди, спарсить там еще (ну это я уже сам разберусь).
mogo вне форума Ответить с цитированием
Старый 12.02.2014, 17:43   #10
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
function Parse(const tag1, tag2, source: string; const beg: string = ''): string;
var
  p, p2, len: Integer;
begin
  Result := '';
  if beg = '' then
    p := StrUtils.PosEx(tag1, source)
  else
    p := StrUtils.PosEx(tag1, source, StrUtils.PosEx(beg, source) + Length(beg) + 1);

  len := Length(tag1);
  p2 := StrUtils.PosEx(tag2, source, p + len + 1);
  if (p = 0) or (p2 = 0) then
    Exit;
  if p2 > p then
    Result := (Copy(source, p + len, p2 - p - len));
end;
Код:
var
  Str : TStringList;
...
Str.Text := 'Ваш текст';
for i:=0 to Str.Count-1
begin
 Memo1.Lines.Add(Parse('<id>', '</id>', Str.Strings[i]);
end;
ZuBy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг. Fahman Общие вопросы Delphi 1 18.12.2013 15:52
парсинг gunguru PHP 1 07.06.2012 11:49
парсинг Pein95 Работа с сетью в Delphi 4 01.12.2011 02:06