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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скан HTML кода на ссылки, Надо получить список ссылок 
:(
    Опции темы
rcdimon
Дата 26.2.2005, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я хочу написать что то типа небольшой поисковой системы (в образовательных целях). Для этого мне нада сканировать страницу и вынимать из нее все ссылки, в том числе и на картинки. Я знаю что для получения кода можно использовать LWP::Simple, но не знаю как и не знаю как потом выделить из него ссылки.

Заранее спасибо.
PM MAIL ICQ   Вверх
korob2001
Дата 26.2.2005, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Код

#!/usr/bin/perl -w
use strict;
use LWP::Simple;
my $url = "http://yandex.ru";
my $p = get( $url );
my @links;

$p =~ s/href\=\"(http:\/\/.*?)\"/push( @links, $1 )/eg;

print join("\n", @links);

Что-то типа этого. Извини, времени в обрез. Если что-то не понятно дай знать. Этот шаблон быдёргивает только ссылки начинающиеся с http, потому как от таких ссылок ../../guest/book.cgi, толку мало.

Возможно нужно будет доработать шаблон, потому как я его толком не тестировал.

Это сообщение отредактировал(а) korob2001 - 26.2.2005, 23:02


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
rcdimon
Дата 27.2.2005, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А модуль LWP::Simple - стандартный или его нет в обычном дистрибутиве?
PM MAIL ICQ   Вверх
korob2001
Дата 27.2.2005, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Стандартный.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
rcdimon
Дата 27.2.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это очень хорошо. И еще, спасиба, тебе. Все работает. Но хотелось бы все ссылки, в том числе и на картинки так как поисковик все же должен сканировать весь сайт. А основная цель моего поисковика- картинки.
PM MAIL ICQ   Вверх
korob2001
Дата 27.2.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

Это очень хорошо. И еще, спасиба, тебе. Все работает. Но хотелось бы все ссылки, в том числе и на картинки так как поисковик все же должен сканировать весь сайт. А основная цель моего поисковика- картинки.

С каким расширением картинки нужны? .jpg .gif .bmp????


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
rcdimon
Дата 27.2.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все. Включая png и т.д. И попутно нада бы еще собирать инфу о их размере и разрешении. А вообще идеально- скачивать, перекодировать в jpg с качеством 60 и уменьшать до 100 пикселов примерно.
PM MAIL ICQ   Вверх
Sadok
Дата 28.2.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код
use strict;
use LWP::UserAgent;
use HTML::LinkExtor;
use URI::URL;
my ($url, $ua, $res, $base, $p, %links);
$url = "http://gol.mkafisha.ru/";
$ua = LWP::UserAgent -> new;
$ua -> proxy(http => 'http://vali:2128');
$p = HTML::LinkExtor -> new(\&callback);
$res = $ua -> request(HTTP::Request -> new(GET => $url));
$res -> is_success() ? {$p -> parse($res -> content), print $res -> status_line ."\n"} : print "Error: " . $res -> status_line ."\n";
$base = $res -> base;
defined %links ? map {print url($_, $base) -> abs,"\n"} sort (keys %links) : print "No items, sorry...";
sub callback {
my ($tag, %attr) = @_;
map {$links{$_}++} values %attr;
}


Я вот так ссылки вырезаю.
PM   Вверх
rcdimon
Дата 28.2.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, вечером проверю как будет работать у меня. Код правда мне не ясен, но пару знакомых букв я все же нашел smile
PM MAIL ICQ   Вверх
rcdimon
Дата 1.3.2005, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код работает хорошо, спасибо.

Мне предложили 2 способа. Какой лучше? Какой работает быстрее и выбирает большее колличество ссылок? А то первый вариант собирает точно не все

<a href="asdasd.werwer.ru">

Он найдет, но если будут пробелы между = или он будет без ковычек, то все...

Второй способ как я понял работает напрямую с сервером и вынимает ссылки по средсьвом специального модуля. Насколько это удобно? Он все пихает в один массив, а мне мылы надо в один, локальные ссылки в другой, а глобальные в третий.

А как перерабатывать картинки никто не знает? Или хотя бы как получить сведения о их размере и разрешении и при желании скачать.
PM MAIL ICQ   Вверх
korob2001
Дата 1.3.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

Мне предложили 2 способа. Какой лучше? Какой работает быстрее и выбирает большее колличество ссылок? А то первый вариант собирает точно не все

<a href="asdasd.werwer.ru">

Он найдет, но если будут пробелы между = или он будет без ковычек, то все...

С каждым из них нужно работать, потому как это только заготовки. Есть конечно же ещё и другие пути, например: стандартный модуль HTML::Parser.
Цитата

Второй способ как я понял работает напрямую с сервером и вынимает ссылки по средсьвом специального модуля. Насколько это удобно? Он все пихает в один массив, а мне мылы надо в один, локальные ссылки в другой, а глобальные в третий.

Если у тебя есть один массив со всеми ссылками, то что стоит его разбросать по группам? Это гараздо проще, чем парсить HTML страничку.
Цитата

А как перерабатывать картинки никто не знает? Или хотя бы как получить сведения о их размере и разрешении и при желании скачать.

Здесь тебе помугут модули GD, Image::Magick, Image::Size. Почитай документацию по этим модулям.

Будут конкретные вопросы, пиши.

Удачи.




--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
rcdimon
Дата 1.3.2005, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Шпасиба
PM MAIL ICQ   Вверх
Usya
Дата 17.7.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте, я не стал создавать новой темы, так как задача похожая, но немножко потруднее... smile

Как выкачать все ссылки с сайта?
Вернее необходимо проверить все линки (локальные, глобальные) на наличии ключевой комбинации символов, но для этого их надо сначала выкачать...

Может кто-нибудь сталкивался с этим?
Думал сделать это через wget - он то позволяет выкачивать сайты целиком, но не смог найти, как выкачать только линки.
Должен же быть какой-нибудь простой способ.

Заранее благодарен.
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
Morgul
Дата 19.7.2005, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Usya, наверное, надо просто собирать линки и анализировать их (если внутренние, дальше топаем).
я вот этим модулем пользуюсь для сбора ссылок: HTML::LinkExtor
PM MAIL   Вверх
Usya
Дата 19.7.2005, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо за совет

На счет модуля HTML::LinkExtor здесь уже немного упоминалось

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


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

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


 




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


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

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