PHP Manual

Pobieranie całej witryny za pomocą łączy w PHP

06. 11. 2019

Obsah článku

Stosunkowo często rozwiązuję zadanie pobrania wszystkich stron w obrębie jednej witryny lub domeny, ponieważ następnie wykonuję różne pomiary z wykorzystaniem wyników lub wykorzystuję strony do wyszukiwania pełnotekstowego.

Jednym z możliwych rozwiązań jest użycie gotowego narzędzia Xenu, które jest bardzo trudne do zainstalowania na serwerze WWW (jest to program dla systemu Windows), lub Wget, które nie wszędzie jest obsługiwane i tworzy kolejną niepotrzebną zależność.

Jeśli zadanie polega tylko na wykonaniu kopii strony do późniejszego przeglądania, bardzo przydatny jest program HTTrack, który lubię najbardziej, tylko że przy indeksowaniu sparametryzowanych adresów URL w niektórych przypadkach możemy stracić dokładność.

Zacząłem więc szukać narzędzia, które potrafi automatycznie indeksować wszystkie strony bezpośrednio w PHP z możliwością zaawansowanej konfiguracji. Ostatecznie stał się on projektem typu open source.

Baraja WebCrawler

Właśnie dla takich potrzeb zaimplementowałem własny pakiet Composer WebCrawler, który sam potrafi elegancko obsłużyć proces indeksowania stron, a jeśli natrafię na nowy przypadek, jeszcze go udoskonalam.

Instaluje się go za pomocą polecenia Composer:

composer require baraja-core/webcrawler

I jest łatwy w użyciu. Wystarczy utworzyć instancję i wywołać metodę crawl():

$crawler = new \Baraja\WebCrawler\Crawler;
$result = $crawler->crawl('https://example.com');

W zmiennej $result kompletny wynik będzie dostępny jako instancja encji CrawledResult, którą polecam przestudiować, ponieważ zawiera ona wiele ciekawych informacji o całej witrynie.

Ustawienia pełzacza

Często musimy w jakiś sposób ograniczyć pobieranie stron, ponieważ w przeciwnym razie prawdopodobnie pobralibyśmy cały Internet.

Służy do tego encja Config, której przekazywana jest konfiguracja w postaci tablicy (klucz-wartość), a następnie przekazywana do crawlera przez konstruktor.

Na przykład:

$crawler = new \Baraja\WebCrawler\Crawler(
new \Baraja\WebCrawler\Config([
// klucz => wartość
])
);

Opcje ustawień:

Klucz Wartość domyślna Możliwe wartości
followExternalLinks false Bool: Pozostać tylko w tej samej domenie? Czy może indeksować również linki zewnętrzne?
sleepBetweenRequests 1000 Int: Czas oczekiwania pomiędzy pobraniem każdej strony w milisekundach.
maxHttpRequests 1000000 Int: Ile maksymalnie pobranych adresów URL?
maxCrawlTimeInSeconds 30 Int: Jak długo może trwać maksymalne pobieranie w sekundach?
allowedUrls ['.+'] String[]: Tablica dozwolonych formatów URL jako wyrażeń regularnych.
forbiddenUrls [''] String[]: Tablica zakazanych formatów URL jako wyrażeń regularnych.

Wyrażenie regularne musi pasować do całego adresu URL dokładnie w postaci ciągu znaków.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
Status:
All systems normal.
2024