Web Crawler с поддержкой JavaScript в Perl? - PullRequest
2 голосов
/ 05 марта 2012

Я хочу закодировать perl приложение, которое будет сканировать некоторые веб-сайты и собирать изображений и ссылок с таких веб-страниц. Поскольку большинство страниц используют JavaScript , которые генерируют контент HTML , мне нужно написать код квази-клиентского браузера с поддержкой JavaScript, чтобы иметь возможность анализировать окончательный HTML код, который генерируется и / или модифицируется JavaScript. Какие у меня варианты?

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

Ответы [ 5 ]

7 голосов
/ 05 марта 2012
5 голосов
/ 05 марта 2012

Опции, которые приходят на ум:

  • Вы можете использовать Perl Selenium , и полноценный браузер сделает всю работу за вас.

  • Вы можете скачать и скомпилировать V8 или другой движок JavaScript с открытым исходным кодом и заставить Perl вызывать внешнюю программу для оценки JavaScript.

  • Я не думаю, что модуль Perl LWP поддерживает JavaScript, но вы можете проверить это, если вы еще этого не сделали.

4 голосов
/ 05 марта 2012

WWW :: Scripter с WWW :: Scripter :: Plugin :: JavaScript и WWW :: Scripter :: Plugin :: Ajax плагинов кажется как ближайший, который вы получите без использования реального браузера (модули WWW :: Selenium , Mozilla :: Mechanize или Win32 :: IE :: Mechanize использовать настоящие браузеры).

2 голосов
/ 30 января 2013

Ознакомьтесь с полным рабочим примером, представленным в Соскребая страницы, полные JavaScript . Он использует Web :: Scraper для обработки HTML и Gtk3 :: WebKit для обработки динамического содержимого. Тем не менее, более поздняя версия является достаточно PITA для установки. Если вам нужно очистить не так много страниц (<1000), выборка постобработанного контента DOM через <a href="http://phantomjs.org/" rel="nofollow"> PhantomJS является интересной опцией. Для этой цели я написал следующий скрипт:

var page = require('webpage').create(),
    system = require('system'),
    fs = require('fs'),
    address, output;

if (system.args.length < 3 || system.args.length > 5) {
    console.log('Usage: phantomjs --load-images=no html.js URL filename');
    phantom.exit(1);
} else {
    address = system.args[1];
    output = system.args[2];
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
        } else {
            fs.write(output, page.content, 'w');
        }
        phantom.exit();
    });
}

Что-то подобное уже есть в CPAN, это модуль с именем Wight , но я еще не тестировал его.

0 голосов
/ 30 января 2013

WWW :: Mechanize :: Firefox можно использовать с mozrepl, со всеми действиями javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...