| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Скан HTML кода на ссылки |
| Автор: rcdimon 26.2.2005, 22:02 |
| Я хочу написать что то типа небольшой поисковой системы (в образовательных целях). Для этого мне нада сканировать страницу и вынимать из нее все ссылки, в том числе и на картинки. Я знаю что для получения кода можно использовать LWP::Simple, но не знаю как и не знаю как потом выделить из него ссылки. Заранее спасибо. |
| Автор: korob2001 26.2.2005, 23:00 | ||
Что-то типа этого. Извини, времени в обрез. Если что-то не понятно дай знать. Этот шаблон быдёргивает только ссылки начинающиеся с http, потому как от таких ссылок ../../guest/book.cgi, толку мало. Возможно нужно будет доработать шаблон, потому как я его толком не тестировал. |
| Автор: rcdimon 27.2.2005, 08:00 |
| А модуль LWP::Simple - стандартный или его нет в обычном дистрибутиве? |
| Автор: korob2001 27.2.2005, 08:59 |
| Стандартный. |
| Автор: rcdimon 27.2.2005, 09:59 |
| Это очень хорошо. И еще, спасиба, тебе. Все работает. Но хотелось бы все ссылки, в том числе и на картинки так как поисковик все же должен сканировать весь сайт. А основная цель моего поисковика- картинки. |
| Автор: korob2001 27.2.2005, 13:27 | ||
С каким расширением картинки нужны? .jpg .gif .bmp???? |
| Автор: rcdimon 27.2.2005, 19:27 |
| Все. Включая png и т.д. И попутно нада бы еще собирать инфу о их размере и разрешении. А вообще идеально- скачивать, перекодировать в jpg с качеством 60 и уменьшать до 100 пикселов примерно. |
| Автор: Sadok 28.2.2005, 13:12 | ||
Я вот так ссылки вырезаю. |
| Автор: rcdimon 28.2.2005, 16:51 |
| Спасибо, вечером проверю как будет работать у меня. Код правда мне не ясен, но пару знакомых букв я все же нашел |
| Автор: rcdimon 1.3.2005, 15:26 |
| Код работает хорошо, спасибо. Мне предложили 2 способа. Какой лучше? Какой работает быстрее и выбирает большее колличество ссылок? А то первый вариант собирает точно не все <a href="asdasd.werwer.ru"> Он найдет, но если будут пробелы между = или он будет без ковычек, то все... Второй способ как я понял работает напрямую с сервером и вынимает ссылки по средсьвом специального модуля. Насколько это удобно? Он все пихает в один массив, а мне мылы надо в один, локальные ссылки в другой, а глобальные в третий. А как перерабатывать картинки никто не знает? Или хотя бы как получить сведения о их размере и разрешении и при желании скачать. |
| Автор: korob2001 1.3.2005, 17:20 | ||||||
С каждым из них нужно работать, потому как это только заготовки. Есть конечно же ещё и другие пути, например: стандартный модуль HTML::Parser.
Если у тебя есть один массив со всеми ссылками, то что стоит его разбросать по группам? Это гараздо проще, чем парсить HTML страничку.
Здесь тебе помугут модули GD, Image::Magick, Image::Size. Почитай документацию по этим модулям. Будут конкретные вопросы, пиши. Удачи. |
| Автор: rcdimon 1.3.2005, 20:15 |
| Шпасиба |
| Автор: Usya 17.7.2005, 18:36 |
| Здравствуйте, я не стал создавать новой темы, так как задача похожая, но немножко потруднее... Как выкачать все ссылки с сайта? Вернее необходимо проверить все линки (локальные, глобальные) на наличии ключевой комбинации символов, но для этого их надо сначала выкачать... Может кто-нибудь сталкивался с этим? Думал сделать это через wget - он то позволяет выкачивать сайты целиком, но не смог найти, как выкачать только линки. Должен же быть какой-нибудь простой способ. Заранее благодарен. |
| Автор: Morgul 19.7.2005, 00:31 |
| Usya, наверное, надо просто собирать линки и анализировать их (если внутренние, дальше топаем). я вот этим модулем пользуюсь для сбора ссылок: HTML::LinkExtor |
| Автор: Usya 19.7.2005, 06:28 |
| Спасибо за совет На счет модуля HTML::LinkExtor здесь уже немного упоминалось Единственное два но: 1) Мне придется делать запрос, чтоб на серваке установили этот модуль...(хотя это решаемо)... 2) Придется лазить по каждой странице... Почему то кажется, что должен быть более простой способ. В т.ч., например, с wget. Ведь с помощью wget можно выкачивать сайты целиком. Скорее всего должна быть возможность выкачивания только линков, но я не нашел как... |
| Автор: korob2001 19.7.2005, 20:26 |
| Usya - Гипер ссылка является частью html кода, потому, что бы получить ссылки со всех страниц сайта, нужно пропарсить все эти страницы. Можно конечно получить их прямо из БД, но для этого у тебя должен быть доступ к базе или файлу. |
| Автор: Usya 20.7.2005, 07:00 | ||
| Это понятно, но одно дело парсить вручную, вернее самому писать и отлаживать код (локальные, глобальные ссылки, всякие исключения) и совсем другое, если это можно записать в одну-две строчки... Кстати, кажется нашел золотую жилу 1) из руководства пользователя wget
(для некоторых задач может подойти на 100%) 2) только щас в голову пришло: выкачать с помощью wget сайт (одна строка кода), а потом вырезать из log-файла все ссылки (еще несколько строчек) и не надо никаких дополнительных модулей 3) может еще что-нибудь придет в голову, посмотрим Пока экспериментирую... |
| Автор: Sadok 20.7.2005, 08:34 | ||
Usya
Это только для ftp подходит, т.к.: Заметим, что эти две опции не касаются выгрузки HTML файлов, Wget должен выгружать все HTML документы чтобы выяснять куда ему двигаться дальше, в противном случае рекурсивная выгрузка становится просто бессмысленной. |
| Автор: Usya 20.7.2005, 11:50 |
| Sadok Так я не против того, что wget приходится выгружать html-файлы. Это видно по результатам выполнения программы (или по log-файлу). Хотя, честно говоря, до последнего надеялся на другое. Wget, как я понял, сначала их закачивает, а потом сам и удаляет. Дело в другом: проверять html-файлы в любом случае придется. Кроме того, мне абсолютно не нужны файлы, на которые нет ссылок. Если разработчик сайта решил сделать для себя несколько временных файлов, путь к которым знает только он, или забыл просто удалить отработанные файлы - это его дело. Меня это не интересует. Однако чтобы собрать все ссылки (с последующей обработкой, если нужно), используя wget, можно просто оптимизировать код, тем более, что wget как раз под это и заточен. Выкачал c сайта html-файлы или просто задал какую-нибудь ключевую комбинацию для поиска (которая в принципе не должна встретиться, чтоб случайно не закачать лишнего), из log-файла собрал все ссылки и обрабатывай их сколько хочешь. А можно сразу выкачивать нужные файлы (само собой это не касается html-файлов). Плюс к тому же не надо устанавливать дополнительные модули - мелочь, а приятно Возможно есть и другие варианты, но пока это наиболее оптимальный из тех, до которых я докопался. Впрочем, все нюансы пока не изведал, так что может что-то придется изменить. Правда говорят, что wget достаточно не плох в качестве качалки, по идее должен собирать все (или почти все) ссылки... Время покажет... |