2016-08-16 7 views
0

NokogiriでRedditを削り取ろうとしていますが、これが1回実行されると、Nokogiriを使用してRedditを削る(429件が多すぎます)

require 'nokogiri' 
require 'open-uri' 
url = "https://www.reddit.com/r/all" 
redditscrape = Nokogiri::HTML(open(url)) 

OpenURI::HTTPError: 429 Too Many Requests 

これは唯一のリクエストではありませんか?そうでなければ、ノコギリの睡眠の間隔をどうやって作るのですか?

+1

をあなたはOpenURIのことで、あなたのコード内で鋸山の目的を混乱しています。 OpenURIは接続をNokogiriに渡して読むので、あなたの質問はNokogiriについてではなく、そのようにタグ付けされるべきではありません。それはOpenURIの質問であり、それを反映するように編集する必要があります。 –

答えて

4

Redditには、あなたはおそらく、あなたがこすりしたい特定のサブのreddit(S)のためのAPIを照会することができAPI

を持っています。 Redditのすべてを掻き取ろうとするのは、大量とネストされたコメントを考慮して、待っている悪夢のように思える。

RedditがパブリックAPIを使用することを好むように掻き集める機能をブロックしているようです。

+0

問題のページからすべてのHTMLデータを取り出すだけでいいですか?それはフロントページだけです。コメントは単なるリンクです。 – Andrew

+0

「ホット」トピックを取得しようとしていますか?それとも、文字通りすべてのサブレッドダイレクトの名前だけが必要ですか?あなたが達成しようとしていることを知らずに、最高の答えを出すのは難しいです。 あなたの最初の質問に答えるには、理論的にはノーコギリはそのページのHTMLを返すべきです。 – sump

+2

Redditがopen-uriで使用されているユーザーエージェントをブロックしている可能性があります。それは単純に私たちが0を期待していると言う方法として429を返します。 – Vangel

0

実際の答えは、ユーザーエージェントを設定する必要があるということです。

https://www.reddit.com/r/redditdev/comments/3qbll8/429_too_many_requests/

How to set a custom user agent in ruby

これは私がURI-オープンと鋸山使用して、エラーを回避することができました。

ので、要約する:

redditscrape = Nokogiri::HTML(open(url, 'User-Agent' => 'Nooby')) 
+0

私はAPIが行く方法だと知っていますが、私はどのようにコード化し、redditが超楽しいかを学んでいます。 – StreamedLine

関連する問題