Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг сылок, ?? 
:(
    Опции темы
za12
Дата 8.10.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.8.2007

Репутация: нет
Всего: нет



Всем привет.. народ подскажите как правильно определить какая ссылка на странице принадлежит сайту, т.е его внутренняя ссылка, а какие ссылки внешними, в вобщем проблема такая, как прописать условие, чтобы ссылки вида href="/"или href="/текст/" определялись как внутренние.


для парсинга ссылок использую такой код 

Код

i:=0;
k:=0;
while True do begin
      idxPos:=PosEx('<a ', text, idxPos);
      if idxPos=0 then Break;
      Inc(idxPos, 2);
      idxPos:=PosEx('href', text, idxPos);
      if idxPos<=0 then Continue;
      Inc(idxPos, 4);
      link:=Copy(text, idxPos, PosEx('>', text, idxPos)-idxPos);
       
      links:=Pos('blabla.ru', link);
      if links>0 then
      begin
      i:=i+1;
      Memo4.Lines.Add(inttostr(i)+'-'+link+'Внутряк');
      end else
      begin
      k:=k+1;
      Memo4.Lines.Add(inttostr(k)+'-'+link+'ВНЕШНЯЯ');
      end;




PM MAIL   Вверх
Alix
Дата 8.10.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: нет
Всего: 23



Ненавижу использовать для таких целей такой код. Я бы воспользовался регулярными выражениями. 

Это сообщение отредактировал(а) Alix - 8.10.2007, 11:16


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
ishimcity
Дата 8.10.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 1.6.2007
Где: Тюменская область . Ишим

Репутация: нет
Всего: 1



есть хорошие програмы для парсинга

Paessler Site Inspector
Paessler URL Recorder
PM MAIL ICQ Skype YIM   Вверх
za12
Дата 8.10.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.8.2007

Репутация: нет
Всего: нет



Цитата(Alix @  8.10.2007,  10:28 Найти цитируемый пост)
Ненавижу использовать для таких целей такой код. Я бы воспользовался регулярными выражениями. 


а есть пример с использованием регулярных выражений??



Цитата(ishimcity @  8.10.2007,  10:54 Найти цитируемый пост)
есть хорошие программы для парсинга

Paessler Site Inspector
Paessler URL Recorder 


знаю что есть.. нужна своя.

PM MAIL   Вверх
Alix
Дата 8.10.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: нет
Всего: 23



Кидаем memo1 с исходным текстом страницы, memo2 и button.
Код
uses
  RegExpr; // берем с http://www.regexpstudio.com/

procedure TForm1.Button1Click(Sender: TObject);
var
  regexp : TRegExpr;

begin
  memo2.Clear;

  regexp := TRegExpr.Create;
  regexp.Expression := '(?i)<\s*a[^>]*?href\s*=\s*(["''])([^\1]*?)\1[^>]*>';
  regexp.Compile;
  regexp.InputString := memo1.Lines.Text;

  if not regexp.Exec then
    exit;

  repeat
    memo2.Lines.Add(regexp.Match[2]);
  until not regexp.ExecNext;

  regexp.Free;
end;

Никаких try..except/finally не использовал (на exit без Free тоже не обращаем внимания) т.к. это лишь пример. В цикле я получаю текст атрибута href (regexp.Match[2]), что с ним делать - решай сам smile
Если надо, прокомментирую выражение.

Модераторы!, имхо, это вопрос не для раздела сети...

Это сообщение отредактировал(а) Alix - 8.10.2007, 11:32


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
za12
Дата 8.10.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.8.2007

Репутация: нет
Всего: нет



Цитата(Alix @  8.10.2007,  11:17 Найти цитируемый пост)
Кидаем memo1 с исходным текстом страницы, memo2 и button.
Выделить всёкод Pascal/Delphi

uses
  RegExpr; // берем с http://www.regexpstudio.com/
procedure TForm1.Button1Click(Sender: TObject);
var
  regexp : TRegExpr;
begin
  memo2.Clear;
  regexp := TRegExpr.Create;
  regexp.Expression := '(?i)<\s*a[^>]*?href\s*=\s*(["''])([^\1]*?)\1[^>]*>';
  regexp.Compile;
  regexp.InputString := memo1.Lines.Text;
  if not regexp.Exec then
    exit;
  repeat
    memo2.Lines.Add(regexp.Match[2]);
  until not regexp.ExecNext;
  regexp.Free;
end;

Никаких try..except/finally не использовал (на exit без Free тоже не обращаем внимания) т.к. это лишь пример. В цикле я получаю текст атрибута href (regexp.Match[2]), что с ним делать - решай сам smile
Если надо, прокомментирую выражение.

Модераторы!, имхо, это вопрос не для раздела сети...


спасибо... 


Это сообщение отредактировал(а) za12 - 8.10.2007, 11:35
PM MAIL   Вверх
za12
Дата 8.10.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.8.2007

Репутация: нет
Всего: нет



Народ чет не врубаюсь, а где там компонент валяется. чет ссылки не вижу.?
PM MAIL   Вверх
Alix
Дата 8.10.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: нет
Всего: 23





--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
XerSon
Дата 29.3.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.3.2008

Репутация: нет
Всего: нет



Всем привет! У меня возникли некие сомненья, по поводу исп в Регулярных выражениях (RegExpr) - такого вида синтаксиса: 

Легенда: Есть рег выражение типа Строка:блаблабла
Реализация: Как сие найти во входных данных и вывести, отделив Строка: и оставив блаблабла

??? 
PM MAIL   Вверх
aktuba
Дата 29.3.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 9
Всего: 38



По двоеточию.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
XerSon
Дата 29.3.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.3.2008

Репутация: нет
Всего: нет



Цитата(aktuba @ 29.3.2008,  12:21)
По двоеточию.

По двоеточию не льзя! Только в том варианте что я описал!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.