2013-05-22 8 views
1

У меня возникли проблемы с извлечением javascript с помощью Web :: Scraper. Ниже мой тестовый скрипт:Извлечение javascript с помощью Web :: Скребок

#!/usr/bin/perl 
use Modern::Perl; 
use Web::Scraper; 
use Data::Dumper; 

my $contents = do { local $/; <DATA> }; 
my $scraper = scraper { process "//script", "scripts[]" => 'TEXT'; }; 
my $res = $scraper->scrape($contents); 

say Dumper $res; 

exit; 

__DATA__ 
<html><head><title>hello</title></head> 
<body> 
    <script type="text/javascript"> 
    var dummy = {} 
    </script> 
</body> 
</html> 

И мой выход:

$VAR1 = { 
      'scripts' => [ 
         '' 
         ] 
     }; 

Мне кажется, что я в поиске тег сценария, но не сохранение содержимого между тегами.

ответ

0

Я нашел решение после копания в xpath.

Изменение скребок линии от:

my $scraper = scraper { process "//script", "scripts[]" => 'TEXT'; }; 

To:

my $scraper = scraper { process "//script" => 'scripts[]' => 
        scraper { process '//text()', 'script'=>'TEXT'} }; 

Выдает Javascript код:

$VAR1 = { 
      'scripts' => [ 
         { 
          'script' => ' 
    var dummy = {} 
    ' 
         } 
         ] 
     }; 

Я не уверен в технологической линии является кратким, но работает.

0

Попробуйте RAW, как

#!/usr/bin/perl -- 
use strict; 
use warnings; 
use Web::Scraper; 
use Data::Dump; 
my $contents = q{ 
<html><head><title>hello</title></head> 
<body> 
    <script type="text/javascript"> 
    var dummy = {} 
    </script> 
</body> 
</html>}; 
#~ my $scraper = scraper { process "//script", "scripts[]" => 'TEXT'; }; 
my $scraper = scraper { process "//script", "scripts[]" => 'RAW'; }; 
my $res = $scraper->scrape($contents); 
dd $res; 
__END__ 
{ scripts => ["\n var dummy = {}"] } 
+0

Спасибо за предложение. Я попробовал изменение, и он вытащил код js. Единственная проблема заключается в том, что данные в var имеют котировки, которые отображаются как '"', что делает синтаксический анализ данных более сложным. – BurritoBoy

Смежные вопросы