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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2010, 17:31   #1
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию Парсинг html страниц

Не могу негде найти пример парсинга страниц, нет ли у кого рабочий код парсера под Delphi 2009. Уже и гуглил и тындыкал, результат только либо платные исходники, либо предложение идти лесом в поиск. Парсить нужно ссылки типа
<a href="viewp.php?ad=(некоторое число ссылки)" target="_blank">тест ссылки </a></td>
И подсчитать сумарное число их количество в label, но лучше в listviewitem
Очень нада
bulldog5293 вне форума Ответить с цитированием
Старый 13.07.2010, 17:37   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вам не надо именно HTML парсить, вам нужен просто парсинг.
то есть выделение нужной части текста.
примеров масса.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.07.2010, 18:00   #3
kakawkin
Форумчанин
 
Регистрация: 21.09.2009
Сообщений: 431
По умолчанию

ну для строки:"<html><a href="viewp.php?ad=32265489" target="_blank">тест ссылки </a></td></html>"
a:=idhttp1.get('ССЫЛКА НА СТРАНИЦУ');
Memo1.Text:=Copy(a,Pos('viewp.php?a d',a)+13,8);

А вообещ найти информацию про функции Copy и Pos и будет тебе счастье
kakawkin вне форума Ответить с цитированием
Старый 13.07.2010, 18:13   #4
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

пре использование
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer;
begin
a:=idhttp1.get('G:\Новая папка (2)\work.php');ошибка так как копия на жёстком
Memo1.Text:=Copy(a,Pos('viewp.php?a d',a)+13,8);
end;
правда с indy я давно не работал.
а функции Copy и Pos эт если не ошибаюсь к регулярным выражениям относятся
хотя даже если и сайт прописываю

Последний раз редактировалось bulldog5293; 13.07.2010 в 18:23.
bulldog5293 вне форума Ответить с цитированием
Старый 13.07.2010, 18:24   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну если у вас страница на компе то грузите в TStringList и потом работайте через Copy/PosEx(самое быстрое но труднее) или Copy/Pos/Delete(медленнее но легче).
и кстати, php <> html

Цитата:
а функции Copy и Pos эт если не ошибаюсь к регулярным выражениям относятся
что?
это обычная работа со строками. к регуляркам отношения не имеет(судя по такому предположения вы не особо знаете что такое RegExp)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.07.2010, 18:34   #6
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Пепел феникса можеш хоть простой пример для этого, у меня как то был, но при трагичных обстоятельствах потерял и найти не могу в интернете
bulldog5293 вне форума Ответить с цитированием
Старый 13.07.2010, 19:33   #7
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Всё таки запустить получилось так
a:= IdHttp1.Get('http://www.сайт.net/work.php?r=');
Memo1.Text:=Copy(a,Pos('viewp.php?a d',a)+13,6);
Но я получаю только один номер, а если их на странице несколько?

Последний раз редактировалось bulldog5293; 13.07.2010 в 19:58.
bulldog5293 вне форума Ответить с цитированием
Старый 13.07.2010, 20:36   #8
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

блин забыл модераторы не ругайтесь, тема закрыта ведь ответ я получил
bulldog5293 вне форума Ответить с цитированием
Старый 13.07.2010, 20:43   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Но я получаю только один номер, а если их на странице несколько?
Либо используйте PosEx (там можно указать, начиная с какой позиции искать)
либо удаляйте найденный текст и продолжайте поиск:
Код:
Memo1.Text := '';
while Pos('viewp.php?ad',a)>0 do begin
   Memo1.Lines.Append(Copy(a,Pos('viewp.php?ad',a)+13,6));
   Delete(a,1, Pos('viewp.php?ad',a)+13);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.07.2010, 21:39   #10
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Serge_Bliznykov спасибо памогло
bulldog5293 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг html кода LT. Общие вопросы .NET 2 01.07.2010 07:30
парсинг Html eldar Общие вопросы Delphi 4 23.04.2009 20:42
Парсинг HTML страницы OkeaH Работа с сетью в Delphi 1 19.01.2009 09:17
HTML Парсинг BaikalLord Помощь студентам 5 15.12.2008 08:20