一つのサイトやドメイン内の全ページをダウンロードし、その結果で様々な計測を行ったり、全文検索に利用したりすることが比較的多いからです。
一つの解決策として、既製のツール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:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | ja