質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Q&A

解決済

1回答

2853閲覧

Rails5+heroku+nokogiriで特定のサイトのみスクレイピングが出来ない

Kochan

総合スコア56

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

0グッド

0クリップ

投稿2018/07/06 04:11

編集2018/07/06 05:14

前提・実現したいこと

小説家になろうというサイトのタイトルと詳細説明をスクレイピングで取ってこようとしています。
アドレス例:https://ncode.syosetu.com/n9669bk/

発生している問題・エラーメッセージ

ローカルでは問題なく取得できるのですが、
Heroku上からアクセスしようとすると500 Internal Server Errorが返って来てしまいます。

小説家になろう以外のサイトについては問題がありませんでした。

こちらの原因について心当たりがありましたらご教示お願いいたします。

該当のソースコード

ruby

1 def scraping_novel 2 require 'open-uri' 3 require 'nokogiri' 4 5 # スクレイピング先のURL 6 url = params[:url] 7 charset = nil 8 9 html = open(url) do |f| 10 charset = f.charset 11 f.read 12 end 13 14 doc = Nokogiri::HTML.parse(html, nil, charset) 15 16 p doc.css("p.novel_title").inner_text 17 p doc.css("div#novel_ex").inner_text 18 19 # タイトルを表示 20 @novel_title = doc.css("p.novel_title").inner_text 21 @novel_description = doc.css("div#novel_ex").inner_text 22 23 end

試したこと

他のサイトでスクレイピングしたところ、
問題なく取得できるようなので設定か、セキュリティ的な問題だと考えております。

他のサイトでスクレイピングしたところ、
以下の部分でログに空文字が表示されました。
p doc.css("p.novel_title").inner_text
p doc.css("div#novel_ex").inner_text

追記

小説取得部分のログを追記いたします。
heroku logs -t -a narou-matome

terminal

12018-07-06T05:12:49.216323+00:00 app[web.1]: [15832366-33fd-4bc0-aaa6-5c38caea95fe] Started GET "/matomes/scraping_novel?url=https%3A%2F%2Fn 2code.syosetu.com%2Fn4449cj%2F" for 162.158.7.30 at 2018-07-06 05:12:49 +0000 32018-07-06T05:12:49.217485+00:00 app[web.1]: [15832366-33fd-4bc0-aaa6-5c38caea95fe] Processing by MatomesController#scraping_novel as HTML 42018-07-06T05:12:49.217515+00:00 app[web.1]: [15832366-33fd-4bc0-aaa6-5c38caea95fe] Parameters: {"url"=>"https://ncode.syosetu.com/n4449cj 5/"} 62018-07-06T05:12:49.970244+00:00 heroku[router]: at=info method=GET path= "/matomes/scraping_novel?url=https%3A%2F%2Fncode.syosetu.com%2Fn44 749cj%2F" host=narou-matome.com request_id=15832366-33fd-4bc0-aaa6-5c38caea95fe fwd="125.12.18.156,162.158.7.30" dyno=web.1 connect=1ms servi 8ce=755ms status=500 bytes=1827 protocol=https 92018-07-06T05:12:49.968024+00:00 app[web.1]: [15832366-33fd-4bc0-aaa6-5c38caea95fe] Completed 500 Internal Server Error in 750ms (ActiveReco 10rd: 0.0ms) 112018-07-06T05:12:49.968840+00:00 app[web.1]: [15832366-33fd-4bc0-aaa6-5c38caea95fe] 122018-07-06T05:12:49.968886+00:00 app[web.1]: [15832366-33fd-4bc0-aaa6-5c38caea95fe] OpenURI::HTTPError (503 Service Temporarily Unavailable) 13: 142018-07-06T05:12:49.968934+00:00 app[web.1]: [15832366-33fd-4bc0-aaa6-5c38caea95fe] 152018-07-06T05:12:49.968983+00:00 app[web.1]: [15832366-33fd-4bc0-aaa6-5c38caea95fe] app/controllers/matomes_controller.rb:90:in `scraping_no 16vel'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/07/06 04:33 編集

heroku のログに エラーメッセージが出ていると思いますので、ログを質問に追記してください。
Kochan

2018/07/06 05:14

コメントありがとうございます!追記させていただきました!
guest

回答1

0

ベストアンサー

heroku run bashで起動したbashでcurlを用いて調べてみましたが
なろう側のIPアドレスによって処理を振り分ける部分(多分アク禁)になんらかのバグがあるようです。

herokuおよびamazon EC2のIP・ホストが禁止リストに入っている(が、なんらかの記述ミスがある)ような気がします。

なお、プロキシを噛ませたところ大部分はForbidden(アクセス禁止)でした。

投稿2018/07/06 18:35

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kochan

2018/07/07 03:24

asmさん、調べていただいたようでご回答、本当にありがとうございます! heroku, amazonからのアクセスが禁止されているということで、 こちらはアプリケーション側でIPを偽装すればアクセスできる可能性が高いということでしょうか・・?
asm

2018/07/07 07:18

知られているほとんどのプロキシサーバーはなろうのアクセス禁止リストに入っていました。 今現在使えるプロキシサーバーも1ヶ月 1週間先はどうなってる事やら
Kochan

2018/07/07 07:21

asmさん、コメントありがとうございます! 現在はスクレイピングではなく、なろう側の提供するAPIを使ってなんとか出来ないかということを試しています。 asmさんにコメント頂けかなければ原因が分からずトライし続けていたかもしれません。 本当に助かります。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問