Scrawler

Scrawler jest programowalnym robotem sieciowym (crawlerem) z możliwością elastycznego konfigurowania wszelkich czynności, które może wykonać na określonej stronie, z naciskiem na pozysykiwanie wybranych danych.

Jego główną cechą jest duży poziom rozszerzalności, który pozwala zdecydować niemal o każdym kroku wykonywanym podczas przeszukiwania stron – od sposobu w jaki pozyskiwane są kolejne adresy do przeskanowania, przez rozbudowany system pozwalający na wyciągnięcie tylko tych danych, które są potrzebne (np. za pomocą selektorów CSS, XPatha czy wyrażeń regularnych), aż po zapis danych. To, czy wynik pracy Scrawlera zostanie zapisany do pojedynczych plików tekstowych, plików CSV czy niemal dowolnej bazy danych, zależy tylko od kilku linijek w konfiguracji. Poniżej można zobaczyć jej wycinek:

$scrawler
    ->addUrlListProvider(new ArgumentAdvancerUrlListProvider('/page/%u', 2))
    ->addObjectDefinition('post', new CssSelectorListMatcher('article.hentry'), function (ObjectConfiguration $object) {
        $object
            ->addFieldDefinition('date', new CssSelectorHtmlMatcher('time.entry-date'))
            ->addFieldDefinition('content', new CssSelectorHtmlMatcher('div.entry-content'))
            ->addFieldDefinition('title', new CssSelectorHtmlMatcher('h1.entry-title a'))
            ->addEntityMapping(PostEntity::class)
            ->addResultWriter(PostEntity::class, new JsonFileResultWriter([
                'directory' => 'posts/',
                'filename' => new EntityPropertyFilenameProvider([
                    'property' => 'slug',
                ]),
            ]))
        ;
    })
;

Ponadto, dzięki architekturze obiektowej, logika każdej z wykonywanych czynności może zostać zaprogramowana w samodzielne napisanej klasie (implementacji), której można następnie użyć zamiast wbudowanych możliwości – także przy użyciu raptem kilku linijek.

Biblioteka pozwala na zautomatyzowanie uciążliwych czynności, takich jak obsługa ruchu HTTP, interpretacja pliku robots.txt czy parsowanie HTML-a. Może generować wyniki w gotowej formie (np. plików HTML) lub np. w postaci JSON nadającej się do dalszej obróbki innym oprogramowaniem. To tylko przykłady wbudowanych opji – etap zapisu wyników także jest w pełni konfigurowalny i pozwala na użycie własnych implementacji.

Zainteresowanych odsyłam do strony zawierającej rozbudowaną dokumentację Scrawlera, podlinkowej poniżej lub do, nieco bardziej szczegółowego, wpisu powstałego przy okazji wydania projektu.

Kod źródłowy skryptu jest w pełni otwarty.

Zobacz stronę
Zobacz kod źródłowy na GitHubie