8

大規模な Web スクレイピング/解析プロジェクトを設計しています。基本的に、スクリプトは Web ページのリストを調べ、特定のタグのコンテンツを抽出し、データベースに保存する必要があります。大規模 (数千万ページ) でこれを行う場合、どの言語をお勧めしますか? .

データベースには MongoDB を使用しているため、しっかりした MongoDB ドライバーがあればプラスになります。

これまでのところ、PHP、curl、 Simple HTML DOM Parserを使用してきましたが (笑わないでください) 、特に PHP には適切なマルチスレッド機能がないため、何百万ページにも拡張できるとは思いません。

簡単に開発でき、Linux サーバーで実行でき、そのタグを簡単に抽出できる強力な HTML/DOM パーサーを備え、妥当な時間内に何百万もの Web ページを簡単にダウンロードできるものが必要です。リンクをたどってすべてのコンテンツをインデックス化する必要はなく、リストの各ページから 1 つのタグを抽出するだけでよいため、実際には Web クローラーを探しているわけではありません。

4

4 に答える 4

7

本当に大規模な場合は、 Hadoopのような Map-Reduce フレームワークなど、水平方向にスケーリングできるものが必要になるでしょう。Hadoop ジョブはさまざまな言語で記述できるため、Java に縛られることはありません。たとえば、Python での Hadoop ジョブの記述に関する記事を次に示します。httplib2ところで、リクエストの作成やlxml結果の解析などのライブラリのおかげで、これはおそらく私が使用する言語です。

Map-Reduce フレームワークがやり過ぎの場合は、Python に保持して を使用できますmultiprocessing

更新: MapReduce フレームワークが不要で、別の言語が必要な場合は、ThreadPoolExecutorin Java をチェックしてください。ただし、Apache Commons HTTP クライアントのものを使用することは間違いありません。適切な JDK のものは、プログラマにとってあまり使いにくいものです。

于 2010-06-29T18:00:42.227 に答える
3

おそらく、Webアプリケーション(WatiNまたはSelenium)のテストに使用されるツールを使用する必要があります。

次に、私が作成したツールを使用して、データから分離したワークフローを作成できます。

https://github.com/leblancmeneses/RobustHaven.IntegrationTests

WatiNまたはSeleniumを使用する場合は、手動で解析する必要はありません。代わりに、cssquerySelectorを記述します。

TopShelfとNServiceBusを使用すると、ワーカーの数を水平方向にスケーリングできます。

参考:私が言及したこれらのツールは、モノラルでLinux上で実行できます。(マイルは異なる場合がありますが)

データを動的にロードするためにJavaScriptを評価する必要がない場合:ドキュメントをメモリにロードする必要があるものはすべて時間を浪費します。タグがどこにあるかがわかっている場合、必要なのはsaxパーサーだけです。

于 2012-05-04T04:27:01.683 に答える
1

HttpClient コモンズ ライブラリで Java を使用して同様のことを行います。正規表現から簡単に見つけられる特定のタグを探しているので、DOM パーサーは避けます。

操作の最も遅い部分は、http 要求の作成です。

于 2010-06-29T17:54:10.887 に答える
0

C ++はどうですか?多くの大規模なライブラリがあなたを助けることができます。

Boost asioは、ネットワークの構築に役立ちます。

TinyXMLはXMLファイルを解析できます。

データベースについてはわかりませんが、ほとんどすべてのデータベースにc ++のインターフェイスがあり、問題はありません。

于 2012-05-09T09:50:28.297 に答える