0

私は自分で使用するための楽しいアプリを書いています。このアプリでは、いくつかの情報を抽出する従来の POST 形式で URL を配置しています。たとえば、この行は、ページのタイトルを抽出している場所です。

self.name = Nokogiri::HTML(open(self.url)).css('title').to_s.sub('<title>','').to_s.sub('</title>','')

ソースページからのデータの解析に Nokogiri (v1.5.4) を使用しています。ここで何かが欠けているかどうかはわかりませんが、アプリケーションの動作がおかしいです。

自分のマシンの開発環境のローカルホストで実行している場合、すべてが正常に機能し、問題ないように思えます。しかし、Heroku をプッシュした後、いくつかの問題が発生しました。たとえば、StackOverflow からの URL には常に次のタイプのエラーがあります。

OpenURI::HTTPError (503 Service Unavailable):
app/models/url.rb:67:in `set_name'
app/controllers/urls_controller.rb:48:in `block in create'
app/controllers/urls_controller.rb:46:in `create'

なぜHerokuだけで起こっているのかわかりません。私のローカル マシンでは、同じ URL で完全に動作しています。Heroku で何か不足している可能性がありますが、他の URL は通常の 200 状態を返し、正常に動作しています。これは、StackOverflow からの単なる URL です。

4

1 に答える 1

1

使用しないでください:

.to_s.sub('<title>','').to_s.sub('</title>','')

代わりに次を使用します。

.text

例えば:

html = '<head><title>foo</title></head>'
Nokogiri::HTML(html).css('title').text

IRB では:

irb(main):055:0> html = '<head><title>foo</title></head>'
"<head><title>foo</title></head>"
irb(main):056:0> Nokogiri::HTML(html).css('title').text
"foo"

Heroku で StackOverflow の URL が 503 で失敗する理由は、503 を取得しているため、ルーティングまたはホスティングの問題である可能性があります。

ページをスクレイピングするよりも、「Stack Overflow のパブリック データ ダンプはどこにありますか?」と「 Stack Overflow Creative Commons Data Dump」を検討することをお勧めします。

于 2012-07-27T17:17:20.277 に答える