1

以下のコードを使用して Web サイトをクロールしていましたが、クロールしすぎてサイトから完全に追放された可能性があります。ブラウザでサイトにアクセスすることはできますが、open-uri とこのサイトを含むコードを実行すると、503 サイトを利用できないというエラーが表示されます。open-uri は、たとえば google や facebook でも問題なく動作するため、これはサイト固有のものだと思います。これに対する回避策はありますか?

require 'rubygems'
require 'hpricot'
require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://www.quora.com/What-is-the-best-way-to-get-ove$

topic = doc.at('span a.topic_name span').content
puts topic
4

1 に答える 1

5

回避策はありますが、最善の方法は、彼らの条件に従って善良な市民になることです。利用規約に従っていることを確認することをお勧めします。

検索エンジンまたはロボットを操作する場合、またはすべての Quora コンテンツの大部分を再公開する場合 (当社の合理的な裁量により決定される場合があります)、さらに次の規則に従う必要があります。

  • 説明的なユーザー エージェント ヘッダーを使用する必要があります。
  • 常に robots.txt に従う必要があります。
  • ユーザー エージェント文字列、または Web サイトがある場合は Web サイトで、連絡方法を明確にする必要があります。

OpenURIを使用して、ユーザー エージェント ヘッダーを簡単に設定できます。

Additional header fields can be specified by an optional hash argument.

  open("http://www.ruby-lang.org/en/",
    "User-Agent" => "Ruby/#{RUBY_VERSION}",
    "From" => "foo@bar.invalid",
    "Referer" => "http://www.ruby-lang.org/") {|f|
    # ...
  }

robots.txt は から取得できますhttp://www.quora.com/robots.txt。あなたはそれを解析し、その設定を尊重する必要があります。

また、ループ間でスリープしてコードの速度を制限したい場合もあります。

また、サイトのコンテンツをスパイダーしている場合は、ページをローカルにキャッシュするか、スパイダー パッケージのいずれかを使用することを検討してください。クモを書くのは簡単です。サイトでうまく機能するものを作成するのは大変ですが、サイトをまったくスパイダーできないよりはましです。

于 2011-12-25T09:15:40.700 に答える