Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Жду замечаний и коментариев, сборщик контента 
:(
    Опции темы
trigger
Дата 21.1.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(JAPH @  21.1.2007,  18:05 Найти цитируемый пост)
Обычно на первой странице в заголовках, кратких описаниях и т.п. говорится, о чём сайт в целом, так что там много терминов, ключевых слов, про которые рассказывает сайт.


первая страница в любом случае берется тем более что это не столь важно что там в title и keyword.
по поводу трафика я уже съел его весь smile - по сему завтра натравлю его на рабочую локаль и сообщу если что. 

nitr
да виласипет ну и что smile  - мне было интересно самому сделать
грабер - сделал но кривовато вот JAPH (Just another perl hacker) и подключился - может ему самому интересно

Это сообщение отредактировал(а) trigger - 21.1.2007, 22:23
PM MAIL WWW ICQ   Вверх
JAPH
Дата 21.1.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



=for offtop
nitr, ну предложите не велосипед. За что народ ни берётся - всё уже сделано до нас. Так всякую охоту что-либо делать отобьёте.
Кроме того, то, что написано собственноручно, просто и понятно. А вот попробуйте растолковать, что да зачем в этих модулях делается? Вот меня интересует вопрос - как DBI.PM умудряется обмениваться данными с MySQL, где конкретно это происходит? (Может, создать отдельную тему, расскажете?)

trigger, it's really interesting. Всё жду, когда предложите, что делать с параметрами. Так и оставить, пусть бегает по всевозможным ссылкам? Или ограничиться одной такой?
Была бы возможность просто стащить исходный код такого скрипта, да вот только не получится.
PM MAIL ICQ   Вверх
nitr
Дата 21.1.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



JAPH, dbi.perl.org, а работает он по средствам "драйверов" (DBD).
Цитата
А вот попробуйте растолковать, что да зачем в этих модулях делается?

Открой модуль - прочти smile Я ничего сложного в этом не нахожу. Да и практически все они написаны неплохо, читабельные.

Я ж не против того чем вы заняты. Это совет! Думаю неплохой ;)

Добавлено @ 23:25 
Цитата
Так всякую охоту что-либо делать отобьёте.

Не хорошо думаете ;)

Просто я прочёл про перекрестные ссылки у вас выше smile Можно хешем... но неплохо будет использовать модули.

з.ы.: Не буду более вам мешать. моё дело посоветовать решение проблемы (в случае ссылок), ну а ваше...


--------------------
PM   Вверх
Nab
Дата 22.1.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот как много написали... smile
Читаю и удивляюсь....

Я думал это так, для изучения возможностей и собственного образования занимаетесь, а вы просто CPAN боитесь smile

Если нет способности, или желания разобраться что делает чужой модуль то вы так и будет поделки на коленке клепать... Хотя спрос и на такие поделки есть, точно знаю...

Но по крайней мере глупо игнорировать миллионы человеко-часов потраченные на разработку модулей...
Когда у вас будет серьезный проект для которого необходимо будет решение целой кучи задач очень разных, то написание всего на pure Perl, без использования модулей отобъет у заказчика желание дожидаться результата smile

Кстати а зачем вы испльзуете LWP? почему не работаете на прямую с сокетами?
Я вот знаю nitr этим страдает smile но у него задача была иная и в LWP она не решалась, хотя всего один нюансик не работал, но делает он это сам просто от того, что готового решения нет...

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




--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
nitr
Дата 22.1.2007, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



Цитата(Nab @  22.1.2007,  00:05 Найти цитируемый пост)
Но по крайней мере глупо игнорировать миллионы человеко-часов потраченные на разработку модулей...Когда у вас будет серьезный проект для которого необходимо будет решение целой кучи задач очень разных, то написание всего на pure Perl, без использования модулей отобъет у заказчика желание дожидаться результата smile

Именно, да и ещё занимаются продвижением смоих модулей, поддержкой. И есть люди помогающие им и т.п.

Извините, если посчитали оффтопом.

Цитата
Кстати а зачем вы испльзуете LWP? почему не работаете на прямую с сокетами?
Я вот знаю nitr этим страдает smile но у него задача была иная и в LWP она не решалась, хотя всего один нюансик не работал, но делает он это сам просто от того, что готового решения нет...

Да, но к сожалению. В принципе можно использовать HTTP::Response, HTTP::Request и URI::*

В таких случаях я пиши своё. Ну или так называемые надработки smile

З.Ы.: Всё на это мой совет исчерпан smile Спасибо, ну и извините, если не помог ;)


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


Опытный
**


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

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



Nab, я, конечно, согласен, что игнорировать CPAN не стоит, но это когда действительно нужно будет сделать нечто ограниченное по времени. А пока программирование есть хобби, имхо можно и позаниматься "велостроительством".
PM MAIL ICQ   Вверх
trigger
Дата 22.1.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile  наслушались критики спасибо всем 

1.если знать только модули (не спорю нужны) 
а не знать как работает - далеко уйдем ?

2. никто ничего не продвигает сдесь
Цитата(nitr @  22.1.2007,  00:13 Найти цитируемый пост)
Именно, да и ещё занимаются продвижением смоих модулей, поддержкой. И есть люди помогающие им и т.п.

   может стоит обидется ? 
3. советы дельные спасибо конечно 

вот истина 
Цитата(JAPH @  21.1.2007,  22:30 Найти цитируемый пост)
Кроме того, то, что написано собственноручно, просто и понятно. 


не думаю что ктото из вас не начинал делать велосипеды - а только через месяц нашли модуль который решает нужную задачу.

Былобы великодушно с Вашей стороны  уважаемые критики (осмелюсь назвать вас ГУРУ)  подсказать стоящий с вашей точки зрения алгоритм(ы) и методы его осуществления.

если взять алгоритм  который я брал вначале - то я не думаю что он не имеет права на существование - он достаточно прост и экономен, а вот методы которые я выбрал - действительно кривые 

такчто слушаим Вас..... smile 

JAPH
не понимаю зачем это нужно  можно в цикле проходить каждый сайт по очереди
и каждый раз заносить первую страницу незачем 
Цитата(JAPH @  21.1.2007,  12:49 Найти цитируемый пост)
 $dbh -> do("INSERT IGNORE INTO pull(sitesID, url, status) SELECT `ID`, `url`, 1 FROM sites");#Пересылаем нужные сайты в таблицу pull, помечая ссылки на их главные страницы статусом 1


ругается сюда на синтакс SQL  при заносе контента 
$sth -> execute($req -> content(), $req -> base(), $id) 

я еще так не тестил сирозно но скрипт отваливается - сори нет времени  пока посмотреть - понедельниг оказался тижолым 


PM MAIL WWW ICQ   Вверх
JAPH
Дата 22.1.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Господи... trigger, расставьте хоть точки в конце каждой мысли! Я так и не понял, что вы имели в виду, говоря
Цитата(trigger @  22.1.2007,  17:18 Найти цитируемый пост)
не понимаю зачем это нужно  можно в цикле проходить каждый сайт по очереди
и каждый раз заносить первую страницу незачем 

Что такое ЭТО? Хоть бы упомянули, о чём речь...
Почему "каждый раз"? Всего один запрос. MySQL его единожды обработает, и никакого цикла не надо. Если можно без цикла, лучше, быстрее, красивее без него. Тем более порядок обхода сайтов не очень-то важен - что сначала все с одного домена, затем с другого, что вперемешку,- всё равно в базе хранится "оптимизированно", т.е. вразброс. Извлекать потом можно по очереди, главную страницу не учитывать (хотя на странице "Ссылки"/"Контакты" тоже не очень-то много полезной информации, но она спокойно забирается и не вызывает возражений smile ).

Что касается ошибки с синтаксисом SQL. Не удалось воспроизвести. smile  Что содержалось на странице? Я пытался вставить кавычку, два минуса подряд, Ctrl+Z, Ctrl+D, Ctrl+C, всё сразу, просто оставить страницу пустой - ну не ругается, и всё! Поконкретнее опишите ситуацию, наставьте print`ов, а ещё лучше пройдитесь отладчиком, если не лень smile. Синтаксис абсолютно корректный (с точки зрения моей MySQL smile я присоединяюсь smile).

=begin offtop
Цитата(trigger @  22.1.2007,  17:18 Найти цитируемый пост)
может стоит обидется ? 

А смысл? Лучше не надо - будем консультироваться по стандартным модулям smile[Кстати, в них главная страница забирается?  smile ]
Но параллельно писать свои smile.
И называть так же, как стандартные - чтоб никто потом не догадался! smile 
=end offtop


PM MAIL ICQ   Вверх
trigger
Дата 23.1.2007, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да с точками и запятыми не сложилось smile - извиняюсь 

сначала что непонятно:
1. строка 
$dbh -> do("INSERT IGNORE INTO pull(sitesID, url, status) SELECT `ID`, `url`, 1 FROM sites");
#Пересылаем нужные сайты в таблицу pull, помечая ссылки на их главные страницы статусом 1
Я не могу понять зачем это делать?
1. в таблице pull колонка url имеет UNIQUE атрибут и при добавлении каждый раз одной и тойже ссылки (например http://localhost/) скорее будет выдаваться ошибка или запись проигнорируется (щас сажусь тестить).

поясню как было задумано по действиям.
1. делаем выбор что делать (в данном случае check)
    выбираем допустим один url из таблицы sites 
    проверяем связь с ресурсом а не с базой
    если связь есть - забираем контент и парсим на ссылки.
    Выбрав все ссылки заносим их в базу (там уже находится http://localhost/) первая страница и все остальные.
    потом каждая выбирается и берется контент по каждой ссылке.
    
Предположим у нас проиндексирована часть сайта - ну просто устали ждать.
 и при повторном запуске скрипта делаем INSERT IGNORE INTO pull(sitesID, url, status)   -  база их проигнорирует из-за UNIQUE и возможно выдаст ошибку.

итак - что и куда ругается (щас добавлю)
отправил в приват - чтоб не мусорить тут 

Это сообщение отредактировал(а) trigger - 23.1.2007, 03:35
PM MAIL WWW ICQ   Вверх
JAPH
Дата 23.1.2007, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понял, в чём проблема - два редиректа на один и тот же ресурс. Надо дописать:
Код

$sth -> execute($req -> content(), $req -> base(), $id) or $dbh -> do("DELETE FROM pull WHERE ID=?", {}, $id)

Так, если неудачно выполняется execute (ошибка duplicate key), эта запись удаляется.
Для корректной работы надо в соединении с базой убрать RaiseError => 1.

Описанный вами check-алгоритм как раз и реализуется, только в исходном варианте это было прописано явно, а сейчас это уже труднее заметить.
Почему делается INSERT-SELECT? Потому что изначально предполагается, что сайтами-кандидатами на обыск заполнена только таблица sites, pull при этом пустая. Этот запрос переводит все эти записи в pull, как если бы у нас была страничка из ссылок на нужные сайты.
Проверка на связь с ресурсом, при успехе проход по всем страницам сайта? Проверка идёт, когда из базы выбирается ссылка на этот сайт, занесённая из sites. Если что-то не получилось - нет связи, сервер перегружен, ленивый сервер,...,- то скрипт об этом напишет, пометит ссылку (фактически, целый сайт) статусом 4 и спокойно пойдёт работать с другими сайтами.
Остальное должно быть понятно - оно почти не изменилось.
Кстати, надо бы подумать, в какой момент возвращаться к строкам статуса 4 и возвращать им статус 1. Может, делать их статус = номеру ошибки? (403, 404, 500)

Ещё одно. Как насчёт ссылок вроде "#top"? Моё предложение - удалять такие хвосты.
Код

#...
$fool_url =~ s/#.*$//;
next unless $fool_url;
if (substr($fool_url, 0, 1) eq '/') {
#...

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


Шустрый
*


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

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



ок щас подставлю и запускаю - огромное спасибо.
Есть предложение!
Во избежание ненужного разростание данной ветки переходить в приват... 
PM MAIL WWW ICQ   Вверх
JAPH
Дата 23.1.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понял, в чём проблема - два редиректа на один и тот же ресурс. Надо в запрос вставить IGNORE. Проверьте, поможет ли.

Описанный вами check-алгоритм как раз и реализуется, только в исходном варианте это было прописано явно, а сейчас это уже труднее заметить.
Почему делается INSERT-SELECT? Потому что изначально предполагается, что сайтами-кандидатами на обыск заполнена только таблица sites, pull при этом пустая. Этот запрос переводит все эти записи в pull, как


Всё это игнорируем. Не могу понять, как это сообщение появилось, когда меня не было в интернете  smile  Тем более, оно неверно, его нормальная версия выше

Это сообщение отредактировал(а) JAPH - 24.1.2007, 19:42
PM MAIL ICQ   Вверх
trigger
Дата 23.1.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я понял все прекрасно. 
скрипт работает - запустил час назад.
пока не отвалился smile

Это сообщение отредактировал(а) trigger - 23.1.2007, 11:48
PM MAIL WWW ICQ   Вверх
trigger
Дата 23.1.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ээээээээээээээээээээээ ... Ну в общем пока все замечательно - тестировал 
для начала на малом проекте - 1700 документов - битые ссылки отловились - заодно и поправились smile

Что касаемо более больших проектов  - 3 000   и   15 000 документов проглотил нормально 
ну а остальные надоело ждать smile

осталось только нормально проверить его на отношение к миру - дома начну проверять на чемто небольшом 
PM MAIL WWW ICQ   Вверх
JAPH
Дата 23.1.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Удачи! smile Главное, чтоб не "отвалился", тогда можно дальше делать.
Если очень хочется, новой темой.
Но в привате-то зачем? Секреты, что ли? OpenSource smile 
PM MAIL ICQ   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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