Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата

Кто как делает эти парсеры при помощи CGI?

Часто вижу, требуют написать парсер как модуль к CMS (ни пусть что это не Perl, а обычно PHP) все равно не могу понять - что для синхронизации данных (если парсер допустим имеет свой WEb интерфейс) какая то кнопка запуска вручную нажимается ? - а если это нужно делать каждые 15 минут - как это исполнить?

всем спасибо.


Тут все просто, если грабер скажем новостей для определенной CMS то я использую модуль HTML::Template т.е готовый шаблон CMS я вставляю свои теги где будет отображаться вывод работы грабера и загружаею его через HTML::Template после всех выполненных операций присваиваю значения переменным HTML::Template. 

Если нужно что бы код повторялся каждые 15 минут то тут я выставляют sleep и после redo. т.е вернуться в начало цикла для выполнения операции. так как обработку я делаю в цикле. 

Таким способом работал для форума SMF писал плагины для отображения новостей с других сайтов. т.е грабер работал как плагин smile

Автор: 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 (описании товара), ну тогда понятно как делать.

А вот если в списке товара содержится одно описание , а в описании другое, то необходим какой то общий алгоритм разбора таких сайтов, который бы учитывал вложенность и принадлежность.
Может кто расскажет как делать ?



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)