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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

1回答

1264閲覧

rubyで一括ダウンロードをしたいです

otakurounin

総合スコア25

Ruby

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

1グッド

1クリップ

投稿2020/04/26 10:51

編集2020/04/30 10:37

rubyで、webページでリンクされているファイルをすべてダウンロードするスクリプトを書きたいです。
以下のコードは、あるサイトで紹介されていた、同様の目的のコードの冒頭部分です。

require 'open-uri' # Nokogiriライブラリの読み込み require 'nokogiri' index = 0 # ファイルの保存先 download_key = './release_2020_04_/' # ------------------------------------------------ # 一覧画面から、詳細画面へのURLを取得する処理 # ------------------------------------------------ # 一覧画面のHTMLを読み込んでNokogiriでparseする index_url = 'https://www.release.tdnet.info/inbs/I_main_00.html' charset = nil index_html = open(index_url) do |f| charset = f.charset f.read p f end index_doc = Nokogiri::HTML.parse(index_html, nil, charset)

(ダウンロード先のフォルダ名と目的のサイトのアドレスは書き換えてあります。
また、最後から3行目の p f は私がデバッグのためにくわえたものです。)
実行すると、以下のようなメッセージが出ます。

from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:319:in `open_http' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:737:in `buffer_open' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:212:in `block in open_loop' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:210:in `catch' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:210:in `open_loop' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:151:in `open_uri' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:717:in `open' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:35:in `open' from ./tekiji_2.rb:16:in `<main>'

(実行の際に、最後に | more を書き加えているのですが、表示が途中で止まらないので、前半部分はわかりません。)
おそらくうまくいっていないと思われるのですが、詳細がわかりません。
まず、オンライン状態で実行してもオフライン状態で実行しても同じメッセージが出るので、
0. 成功した

  1. インターネットアクセスがない
  2. 指定されたアドレスがない
  3. アドレスはあるが読み込めなかった。
  4. 読み込んだ内容をパースできなかった

に分けて、何が起こったのかメッセージが出るようにしたいです。

追記
asmさんに教えていただいた方法でエラーメッセージを見たところ、
最初のほうで、

ruby : C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:882:in `rescue in block in connect': Failed to open TCP connection to ga me8.jp:443 (getaddrinfo: そのようなホストは不明です。 ) (SocketError) 発生場所 行:1 文字:1 + ruby .\tekiji.rb 2>&1 | more + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (C:/Ruby23-x64/l...) (SocketError):String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError from C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:879:in `block in connect' from C:/Ruby23-x64/lib/ruby/2.3.0/timeout.rb:91:in `block in timeout' from C:/Ruby23-x64/lib/ruby/2.3.0/timeout.rb:101:in `timeout' from C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:878:in `connect' from C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:863:in `do_start' from C:/Ruby23-x64/lib/ruby/2.3.0/net/http.rb:852:in `start' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:319:in `open_http' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:737:in `buffer_open' from C:/Ruby23-x64/lib/ruby/2.3.0/open-uri.rb:212:in `block in open_loop'

というメッセージが出ていました。
指定したアドレスが見つけられないということらしいので、改めて、ブラウザでそのアドレスを入力したところ、リンクをたどっていけば表示できるアドレスが、それをそのまま別タブにアドレスバーにペーストすると、
アクセスしようとしているサイトを見つけられません。

www.release.tdnet.info という名前のサーバーに接続できません。 ```というエラーメッセージが出ました。 このサイトの特殊な事情によるエラーかもしれません。 別の日付の内容を表示させてもバーに表示れているURLが変わらないので、そのあたりも関係あるのでしょうか。 追記2: ターゲットのアドレスを別サイトのものに書き換えて実験してみたところ、 ```ここに言語を入力 #<Tempfile:C:/Users/*****/AppData/Local/Temp/open-uri20200430-12716-jelry2>

というメッセージが出るようになりました。
*****は伏字ですが、そこに、AppDataというフォルダはできていません。

DrqYuto👍を押しています

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

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

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

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

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

otn

2020/04/26 11:07

エラーメッセージを載せてください。
guest

回答1

0

提示されたコードでは問題が発生しませんでした。

とりあえず、エラーメッセージを見るための方法として
「標準エラー出力を標準出力にリダイレクトする」という方法があります。

具体的にはruby test.rb 2>&1 | moreなどのように2>&1をコマンドの後ろにつけます。

投稿2020/04/27 05:26

asm

総合スコア15149

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

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

otakurounin

2020/04/27 13:08

ありがとうございます。 エラーメッセージを読むことができました。
asm

2020/04/27 14:00

> Failed to open TCP connection to ga me8.jp:443 (getaddrinfo: そのようなホストは不明です。 ) gaとme8の間に空白がありますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問