6

指定されたWebページの数値を読み取るだけのコンテンツ収集プログラムを構築し、後で分析するためにそのデータを保存する必要があります。リンクや関連データを検索するのに必要ではありません。毎日コンテンツが変更されるWebサイトからすべてのデータを収集するだけです。

私はプログラミングの経験がほとんどないので、これが学習に役立つことを願っています。速度は大きな問題ではありません。クローラーは1日に最大で4000ページをロードする必要があると私は推測しています。

ありがとう。

編集:データを収集しているWebサイトがクローラーから保護されているかどうかを事前にテストする方法はありますか?

4

7 に答える 7

9

おそらく Python、または Perl です。

Perl には非常に優れた LWP ( Library for WWW in Perl ) があり、Python には urllib2 があります。

どちらも、ほとんどの OS で使用できる簡単なスクリプト言語です。

私は Perl でクローラーをかなりの回数実行しました。それは仕事の夜です。

いいえ、ある種の CAPTCHA を使用する以外は、クローラーから身を守ることはできません。

Java については要点がありました。Java は問題ありません。これはより冗長で、開発環境のセットアップが必要です。そのため、1 晩、おそらく 1 週間で行うことはありません。質問の著者が示した小さなタスクの場合、それはやり過ぎかもしれません。一方、(ランダムな HTML の DOM トラバーサル) や (全文のインデックス作成と検索) などの非常に便利なライブラリがあるlintためtagsoupluceneより深刻なプロジェクトには Java が必要になる場合があります。この場合、Apache commons-httpclientWeb クロール用のライブラリをお勧めします (またはnutch、気が狂っている場合:)。

また、特定の Web サイトの変更を監視し、それらを便利な方法で表示するシェルフウェア製品もあります。

于 2009-06-10T19:16:49.283 に答える
7

あなたが最も慣れている言語は、使用するのに最適な言語である可能性が高い.

プログラミング経験がほとんどない

Web クローラーは火の洗礼のようなものであり、選択した言語 (および該当する場合はフレームワーク) に慣れるためには、他にも簡単なアプリケーションをいくつか作成する必要があることに気付くかもしれません。

幸運を!

于 2009-06-10T19:33:11.403 に答える
3

私は一度ウェブクローラーを作成しましたが、サイトを検索して他のサイトへのリンクを探し、それらをたどるために作成されました。それらのリンクを記憶し、サイトに 2 回アクセスしないようにする必要があったため、URL の重複をすばやく確認する方法が必要でした。これを行うために、Delphi 2007 で独自のハッシュ テーブルを作成しました。Internet Explorer COM インターフェイスの使用方法に関する追加知識があれば、短時間でかなり多くのページを読み取ることができました。多くのパフォーマンスが必要だったので、Delphi を使用してこのクローラーを作成しました。

また、Delphi を選択した理由は、Delphi が最も使い慣れている言語だからです。さらに、独自のハッシュ テーブル アルゴリズムの作成方法など、いくつかの興味深いトピックについて多くを学ぶことができました。それに、私のような経験豊富なプログラマーにとって、これは非常に興味深い挑戦でした。

私のアドバイスはすでに提供されています。最も使い慣れたツールを使用してください。

于 2009-06-10T20:54:57.823 に答える
2

データを収集している Web サイトがクローラーから保護されているかどうかを事前にテストする方法はありますか?

CAPTCHA 以外に、robots.txtファイルが存在する場合は、その内容を尊重することをお勧めします。

于 2009-06-10T19:29:38.353 に答える
1

あなたが初心者なら、REBOLのような「簡単な」言語をお勧めします。REBOL では、一連のウィキペディアのページの変更をチェックする基本的なスクリプトは、以下のコードのようになります。明らかに、「簡単」は主観的なものであり、要件を満たすためにこのコードに基本的な変更を加える必要があります。

レコード: %records.txt を読み込み
ます。(records.txt ファイルの内容は次のようになります。インデントは重要ではありません)
[
    [en.wikipedia.org/wiki/Budget_deficit
    "US Budget Deficit (wikipedia)"
    {<li id="lastmod">このページの最終更新日 }
    "2009 年 6 月 1 日 11:26"]

    [en.wikipedia.org/wiki/List_of_U.S._states_by_unemployment_rate
    "米国の失​​業率 (ウィキペディア)"
    {<li id="lastmod">このページの最終更新日 }
    " 2009 年 5 月 25 日 20:15。"]
]

; 次に、レコードをループして、web で各
rec レコードの変更を確認します [
   html: read rec/1 ; ここに 404 秒またはタイムアウトのエラー チェックを追加します。
    parse/all html [any [thru rec/3 copy curr-mod-date to </li>]] not
       rec/4 = curr-mod-date [
          print ["CHANGE DETECTED:" rec/2]
          ; ここで特定のページデータを収集して保存するために再度解析します
          。更新されたタイムスタンプで %records.txt ファイルを更新します
     ]
]

REBOL はあまり知られていませんが、使いやすく、非常に小さく、クロスプラットフォームで、GUI 対応です。私は、迅速で汚いスクリプトで多くの成功を収めてきました。

于 2009-06-10T22:29:22.390 に答える
1

Perl か python は明らかな選択です。それは、最終的に何が自分に最も適しているかによって異なります。どちらもそれほど難しいことではありませんが、一般的に、本当に柔軟な流暢な言語を好む場合は、perl の方が適しています。何かを正しく行うための 1 つの方法) そうすれば、おそらく Python でよりくつろげるでしょう。他の言語でもかなりうまく機能しますが、移植性が高く、CLI スクリプト タスク、特にテキスト操作に適した強力な言語であること、および Web 指向のタスクに利用できる多数の有用なモジュールにつながる強力な webdev 言語であることから、これらの 2 つは明らかな選択です(言及された php の利点を提供しますが、クライアント側の php のマイナス面はありません) . 利用可能な多数の有用なモジュールがあなたにとってプロである場合、perl は他のどの言語 (CPAN 上) よりもこの種のタスクのために大量にあるので、再利用できるコードがあるかどうかを調べる価値があるかもしれません。使用する言語に飛び込みます。特定の領域では、一方が他方よりも高速です (python は一般に複雑な数学に優れており、perl は一般にテキストをより速く処理できますが、方法によって異なります)。

他の言語の選択肢もあります。コンパイルされた言語は移植性が低く、サーバー上で設定するのは一般的に面倒ですが、実行速度は速くなります。スクリプト言語は一般に、コンパイル済み言語よりも簡単にテキストやファイルを操作できるように設計されていますが、常にそうであるとは限りません。私は perl の方が使いやすいので、それを使用しますが、それは決定を下すべき根拠ではなく、どちらがより多くのリソースを使用できるか、どちらがより良い感じが好きかを調べるべきだと私は言います (いくつかを読んでください)。どのスタイルがあなたにとってより理にかなっているのかをコードで確認してから決定してください)。

ああ、オリエリーには、このテーマの初心者を対象とした集団知能のプログラミングに関する本があります。私はそれを読んだことはありませんが、かなり良いはずです。ショップでフリックして、主にWebクローラーアルゴリズムに関するものであるため、検討してください。 .. 例として python を使用します。

于 2009-06-10T20:00:29.943 に答える
-3

PHPと申します。これは Web 指向の言語であり、このようなプロジェクトで必要となる奇妙な小さなことをすべて実行するための多くのライブラリ関数を意味します。このビルトイン (CURL) 用の優れたライブラリがあり、非常にシンプルな言語です。その中でプログラミングを続けると、比較的早く成長してしまいますが、このような単純なものには良い選択です。

于 2009-06-10T19:17:40.217 に答える