| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > грабер - общий алгоритм |
| Автор: burakov 7.4.2011, 23:25 |
| Добрый день, я всех уже наверное забодал этими граберами, но уж очень хочется быстро разобраться в данной теме. В данном случае интересует алгоритм и исполнение грабера: Вот например, понятно, что многопоточные и нет, с докачкой и без, обычно их (граберы) запускают локально (чтобы все модули были и т.п.), но иногда их запускают на хостинге, если хостинг дает доступ к консоли (так?) Но еще,наверное, грабер может запускаться как CGI скрипт!?. (ну иногда ставят в такие условия, что консоли нет, а выполняться грабер должен на хостинге) И тут возникают вопросы - каким образом этот скрипт можно выполнить по расписанию?, и чтобы он выполнялся - все равно нужна же клиентская машина с броузером, то есть пока она включена - скрипт выполняется, как только выключится - ему негде выполнятся? Или я чего то не понимаю? Кто как делает эти парсеры при помощи CGI? Часто вижу, требуют написать парсер как модуль к CMS (ни пусть что это не Perl, а обычно PHP) все равно не могу понять - что для синхронизации данных (если парсер допустим имеет свой WEb интерфейс) какая то кнопка запуска вручную нажимается ? - а если это нужно делать каждые 15 минут - как это исполнить? всем спасибо. |
| Автор: Pfailed 8.4.2011, 04:58 |
| На всех виденных мною хостингах есть cron. |
| Автор: infarch 8.4.2011, 09:50 |
| Запускать кроном или еще как, а веб интерфейс только отображает текущее состояние процесса, по определенным флагам. |
| Автор: OutlawZ 8.4.2011, 22:52 | ||
Тут все просто, если грабер скажем новостей для определенной CMS то я использую модуль HTML::Template т.е готовый шаблон CMS я вставляю свои теги где будет отображаться вывод работы грабера и загружаею его через HTML::Template после всех выполненных операций присваиваю значения переменным HTML::Template. Если нужно что бы код повторялся каждые 15 минут то тут я выставляют sleep и после redo. т.е вернуться в начало цикла для выполнения операции. так как обработку я делаю в цикле. Таким способом работал для форума SMF писал плагины для отображения новостей с других сайтов. т.е грабер работал как плагин |
| Автор: Wooster 13.4.2011, 17:09 |
| Кто-нибудь юзает HTML::TreeBuilder для парсинга HTML? |
| Автор: burakov 13.4.2011, 22:38 |
| Я отказался от парсинга при помощи стандартных модулей (наверное в силу того, что сложно разобраться). по моему легче регексп написать и разбирать - как тебе надо, выдергивать нужные куски |
| Автор: infarch 14.4.2011, 09:30 |
| Да уж, ёмкая причина. Я вот не поленился исследовать HTML::TreeBuilder::XPath, теперь время разработки сокращается во много раз. |
| Автор: burakov 14.4.2011, 10:05 |
| А вот подскажите еще по технологии. Допустим итернет-магазин, часто построен так категория - список товаров - товар (описание) чем отследить такое вот сочетание. 1. Ну один способ я делал имя файла, в котором хранится контент = url на этот контент, если ссылки логичные , то они друг в друга вложены - можно понять, что к чему относится А бывает так, что ссылки на товар никак ни похожи на ссылки на список товаров или категорию и тексты в списке товаров не встречаются в описании товаров), то есть привязаться никак нельзя - как в таком случае грабить, чтобы так сказать дерево сайта (структуру) сохранить? |
| Автор: infarch 14.4.2011, 10:21 |
| Ну можете по папкам раскидать, если уж обязательно хотите в файлах данные хранить. |
| Автор: burakov 14.4.2011, 16:15 |
| В том то и дело что не пойму как это сделать. Сейчас поясню на примере ... ссылка на меню /avto/ далее на список модели /avto/vaz/ далее уже на товар /avto/vaz/lada-kalina таким образом заложив урл в имя файла, куда стянут контент avto_vaz_lada-kalina.htm можно построить типа дерева, карты сайта, ну или по крайней мере знать кому что принадлежит - удобно при разборе. а бывает вот так ссылка на меню /?menu=1231245 ссылка на категорию /?cat=324234 ссылка на товар /?goods=677878678 Получается нужно при грабке как то отслеживать что куда вложено , то есть нужно дерево даже не html Страницы, а всего сайта построить... может какое то готовое решение есть? Иногда на допустим /?goods=677878678 информации достаточно для извлечения, но иногда заказчик требует информации и из списка /?cat=324234. Часто бывает что этом списке есть уникальное сочетание (наименование модели), которое одинаково и в /?goods=677878678 (описании товара), ну тогда понятно как делать. А вот если в списке товара содержится одно описание , а в описании другое, то необходим какой то общий алгоритм разбора таких сайтов, который бы учитывал вложенность и принадлежность. Может кто расскажет как делать ? |