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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HTML::TreeBuilder::XPatx 
V
    Опции темы
infarch
Дата 25.8.2010, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Помогите пожалуйста выяснить в чем проблема! Я с помощью вышеуказанного модуля пытаюсь извлечь информацию из страницы. Вот к примеру попытался получить список ссылок на курсы в в3скулс: 

Код


    use LWP::Simple qw(get getstore);
    
    my $content    = get('http://www.w3schools.com/default.asp');
    
    my $t = HTML::TreeBuilder::XPath->new;
    $t->parse_content($content);

    my @nodes = $t->findnodes( q{//*[@id="leftcolumn"]/a} );

    foreach my $node ( @nodes ){
        
        my $val = $node->findvalue( q{/a/@href} );
        print $val, "\n";
        
        #print $node->as_HTML(), "\n";
        
        
    }



После выполнения " $t->findnodes" я получаю массив нод <a>. теперь я хочу получить их значения href и вот тут получается облом - возвращаются пустые значения. В чем может быть дело? Я уже n вариантов перепробовал, ничего не выходит :(
Конечно, я мог бы написать "$node->attr('href')", но это мне не подходит, ведь нода может иметь и более сложную структуру чем один тег, хочется использовать XPath.


PM MAIL   Вверх
arto
Дата 25.8.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



perldoc HTML::Element
PM MAIL ICQ   Вверх
infarch
Дата 25.8.2010, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я догадывался что мне напишут нечто в этом роде smile . Но дело в том что с точки зрения елемента у меня проблем нет, я пытаюсь XPath освоить.
PM MAIL   Вверх
dva300
Дата 25.8.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



потому что надо примерно так...

Код

use LWP::Simple;
use HTML::TreeBuilder::XPath;
my $content = get('http://www.w3schools.com/default.asp');
   
my $t = HTML::TreeBuilder::XPath->new;
$t->parse_content($content);
for my $node  ($t->findnodes( q{//*[@id="leftcolumn"]/a} ))
    {       
        $node->detach();
        print  $node->findvalue( q{/a/@href} ), "\n";
    }


P.S.
вместо detach можно еще использовать $node->clone->findvalue( q{/a/@href} ), "\n";

Это сообщение отредактировал(а) dva300 - 25.8.2010, 18:13
--------------------
Участник движения Культура Вождения
PM   Вверх
infarch
Дата 25.8.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Идея интересная, но это не всегда подойдет, ведь детач выводит ноду из модели, а она там може еще пригодится. Не люблю нарушать структуру ихсодных данных. Я тут уже нащупал более коректный вариант:

print  $node->findvalue( q{./@href} ), "\n";
PM MAIL   Вверх
dva300
Дата 25.8.2010, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

... Не люблю нарушать структуру ихсодных данных. 


хозяин - барин.

вот тут есть обсуждение этого вопроса 
--------------------
Участник движения Культура Вождения
PM   Вверх
infarch
Дата 25.8.2010, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


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

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


 




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


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

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