C++で非常にシンプルなWebクローラー/スパイダーアプリを作成しようとしています。概念を理解するための簡単な方法を探してグーグルで検索されました。そして私はこれを見つけました:
http://www.example-code.com/vcpp/spider.asp
しかし、それはちょっと複雑で、理解するのが難しいです。
私がやろうとしていることは、例えば、ちょうどです:
次のURLを入力します:www.example.com(bash-> wgetを使用して、コンテンツ/ソースコードを取得します)
次に、「a href」リンクを探し、データファイルに保存します。
簡単なチュートリアル、または私のためのガイドラインはありますか?
C++の学習を始めたばかり(1か月)
大丈夫、私はあなたを正しい方向に向けようとします。概念的には、webcrawlerはかなり単純です。これは、保留中のURLを格納するFIFOキューデータ構造を中心に展開します。C++には、標準ライブラリ std::queue
に組み込みのキュー構造があります。 URLを文字列として保存するために使用できます。
基本的なアルゴリズムは非常に単純です。
今、私はウェブクローラーが概念的に単純であると述べましたが、それを実装することはそれほど単純ではありません。上記のアルゴリズムからわかるように、次のものが必要です。URLをダウンロードできるHTTPネットワークライブラリおよび優れたHTMLパーサーリンクを抽出します。 wget
を使用してページをダウンロードできるとのことですが、これにより、処理が多少簡略化されますが、ダウンロードしたHTMLドキュメントを実際に解析する必要があります。 HTMLを正しく解析することは簡単ではありません。 <a href=
の単純な文字列検索は時々しか機能しません。ただし、これがC++に慣れるために使用している単なるおもちゃプログラムの場合は、単純な文字列検索で十分です。それ以外の場合は、本格的なHTML解析ライブラリを使用する必要があります。
politeness。など、ウェブクローラーを作成するときに考慮する必要があるその他の考慮事項もあります。人々が怒ると、あなたがIPを禁止しようとする可能性があります同じホストからあまりにも多くのページを、あまりにも速くダウンロードするには。そのため、Webクローラーが各サイトをダウンロードする前に短期間待機するようなポリシーを実装する必要がある場合があります。同じURLを再度ダウンロードしないようにするためのメカニズムも必要です。 robots exclusion protocol に従い、クローラートラップを回避するなどです。これらのすべての詳細は、それほど単純ではない堅牢なWebクローラーを実際に実装するために追加されます。事。
そうは言っても、私はコメントでラースマンに同意します。 WebクローラーはC++を学ぶための最良の方法ではありません。また、C++はWebクローラーを書き込むのに最適な言語ではありません。C++で取得する生のパフォーマンスと低レベルのアクセスは、URLが解決されるまで待機するのにほとんどの時間を費やしているWebクローラーのようなプログラムを書く場合には役に立ちません。ダウンロード。私の意見では、Pythonなどの高レベルのスクリプト言語がこのタスクに適しています。
C++で記述された次のWebクローラーとインデクサーを確認してください。 Mitza web crawler コードは参照として使用できます。クリーンであり、webcrawlerコーディングの良いスタートを提供します。シーケンス図は、上記のリンクページにあります。