PHP Manual

PHPでリンクによるサイト全体のダウンロード

06. 11. 2019

Obsah článku

一つのサイトやドメイン内の全ページをダウンロードし、その結果で様々な計測を行ったり、全文検索に利用したりすることが比較的多いからです。

一つの解決策として、既製のツールXenuを使用する方法がありますが、これはWebサーバーにインストールするのが非常に難しく(Windowsプログラムです)、またはWgetはどこでもサポートされておらず、別の不必要な依存関係を生み出します。

後で見るためにページのコピーを取るだけなら、HTTrackというプログラムが非常に便利で、私はこれが一番気に入っています。ただ、パラメータ付きのURLをインデントする場合、場合によっては精度が落ちることがあります。

そこで、高度な設定により、PHPで直接すべてのページを自動的にインデックスすることができるツールを探し始めたのです。やがて、これはオープンソースのプロジェクトとなった。

バラハ・ウェブクローラー

まさにこのようなニーズのために、私は独自のComposerパッケージWebCrawlerを実装しました。これは、それ自体でページのインデックス付け処理をエレガントに処理することができ、新しいケースに出会えば、さらにそれを改良しています。

Composerコマンドでインストールされます。

composer require baraja-core/webcrawler

そして、使い勝手の良さ。インスタンスを生成して crawl() メソッドを呼び出すだけでよい。

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

変数 $result には、完全な結果が CrawledResult エンティティのインスタンスとして格納されます。これは、サイト全体に関する興味深い情報をたくさん含んでいるので、研究することをお勧めします。

クローラー設定

多くの場合、ページのダウンロードを何らかの方法で制限する必要があります。そうしないと、インターネット全体をダウンロードしてしまう可能性があるからです。

これは Config エンティティを用いることで実現される。Config エンティティは設定を配列 (key-value) として渡し、コンストラクタによってクローラに渡す。

例えば、こんな感じです。

$crawler = new \Baraja\WebCrawler\Crawler(
new \Baraja\WebCrawler\Config([
// キー => 値
])
);

設定オプション。

キー|初期値|設定可能な値|||。
followExternalLinks
sleepBetweenRequests
maxHttpRequests
maxCrawlTimeInSeconds
allowedUrls
forbiddenUrls

正規表現は、URL全体を文字列として正確にマッチさせる必要があります。

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