ホームページ >バックエンド開発 >PHPチュートリアル >PHP で実装された軽量でシンプルなクローラー、crawler_PHP チュートリアル
は最近データを収集する必要がありますが、ブラウザ上で名前を付けて保存する方法を使用するのは非常に面倒で、保存や取得には役立ちません。そこで、インターネット上の情報をクロールするための小さなクローラーを作成しました。これまでに 100 万近くの Web ページをクロールしました。現在、このデータを処理する方法を検討中です。
クローラーの構造:
クローラーの原理は実際には非常に単純で、ダウンロードされたページを分析し、リンクを見つけて、それらのリンクをダウンロードし、再度分析してダウンロードするというサイクルが再び始まります。データ ストレージに関しては、検索を容易にするためにデータベースが第一の選択肢であり、開発言語は正規表現をサポートするだけで十分です。そのため、データベースには mysql を選択しました。そのため、開発スクリプトには php を選択しました。 Perl 互換の正規表現をサポートし、mysql への接続に非常に便利で、http ダウンロードをサポートし、Windows と Linux システムの両方に展開できます。
正規表現:
正規表現は、HTML からリンクや画像を抽出するための基本的なツールです。次のような正規表現が使用されます。
コードをコピーします コードは次のとおりです:
"#]+href=(['"])(.+)\1#isU" リンクの処理中
"#]+src=(['"])(.+)\1#isU" 画像の処理中
その他の質問:
クローラーを作成する際に注意する必要があるもう 1 つの問題は、ダウンロードされた URL は繰り返しダウンロードできず、一部の Web ページへのリンクがループを形成するため、この問題に対処する必要があるということです。この問題は、MD5 を計算することで解決されます。処理された URL の値をデータベースに保存して、ダウンロードされたかどうかを確認できるようにします。もちろん、もっと優れたアルゴリズムもありますので、興味があればオンラインで探してみてください。
関連規約:
クローラーには独自のプロトコルもあります。Web サイトが何を通過できるかを定義する robots.txt ファイルがあります。ただし、時間が限られていたため、この機能は実装されませんでした。
その他の指示:
PHP はクラス プログラミングをサポートしています。これは私が作成したクローラーのメイン クラスです。
1. URL 処理 web_site_info、主に URL の処理、ドメイン名の分析などに使用されます。
2. データベース操作 mysql_insert.php は、データベースに関連する操作を処理します。
3. 履歴記録処理。処理された URL を記録します。
4. 爬虫類。
既存の問題と欠点
このクローラは、データ量が少ないときはうまく動作しますが、データ量が多いときは、履歴レコード処理クラスの効率があまり高くありません。データベース構造内の関連するフィールドにインデックスを付けることで、速度が向上します。改善されましたが、データを継続的に読み取る必要があり、これは PHP 自体の配列実装に関連している可能性があり、一度に 100,000 件の履歴レコードをロードすると、速度が非常に遅くなります。
マルチスレッドはサポートされていないため、一度に 1 つの URL しか処理できません。
PHP 自体には、実行時のメモリ使用量制限があります。一度、深さ 20 のページをクロールすると、プログラムがメモリ不足になって強制終了されました。
以下のURLはソースコードのダウンロード用です。
http://xiazai.jb51.net/201506/other/net_spider.rar
使用する場合は、まず mysql で net_spider データベースを作成し、次に db.sql を使用して関連テーブルを作成します。次に、config.php で mysql のユーザー名とパスワードを設定します。
ついに
コードをコピーします コードは次のとおりです:
php -f Spider.php 深さ(数値) URL
仕事を始めることができます。
などコードをコピーします コードは次のとおりです:
php -f Spider.php 20 http://news.sina.com.cn
今思うと、クローラーであることは実際にはそれほど複雑ではありません。データの保存と取得が難しいのです。現在のデータベースには 15G という最大のデータ テーブルがあり、mysql でのクエリではすでにこのデータを処理する方法を見つけようとしています。この点ではGoogleを本当に尊敬します
リーリー