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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

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

Q&A

0回答

207閲覧

Ruby 教師あり学習用データ画像スクレイピング

satou0002

総合スコア10

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

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

0グッド

1クリップ

投稿2019/03/16 05:35

前提・実現したいこと

Ruby初学者です。
RubyでMicroSoft社の検索エンジンBingのAPIを使用し「dog」のワードで検索時の画像データをクロールしてきて、PCへ保存したいと考えています。
以下のコードを実行すると、エラーが表示されました。
###該当のコード

ruby

1require "open-uri" 2require "FileUtils" 3require 'net/http' 4require 'json' 5 6# 保存先ディレクトリ 7@dirName = "./dog_image/" 8# 保存用ディレクトリを作る(ディレクトリがない場合は新たにディレクトリを作成) 9FileUtils.mkdir_p(@dirName) unless FileTest.exist?(@dirName) 10 11# 画像URLから指定フォルダに画像を保存する関数 12def save_image(url, num) 13 filePath = "#{@dirName}/dog#{num.to_s}.jpg" 14 open(filePath, 'wb') do |output| 15 open(url) do |data| 16 output.write(data.read) 17 end 18 end 19end 20 21# 検索ワード 22search_word = 'dog' 23# 保存する枚数(APIの仕様上一気に150枚が限界) 24count = 10 25 26# Bing Search API(公式のコードをそのまま使用) 27# https://dev.cognitive.microsoft.com/docs/services/56b43f0ccf5ff8098cef3808/operations/571fab09dbe2d933e891028f 28uri = URI('https://api.cognitive.microsoft.com/bing/v7.0/images/search') 29uri.query = URI.encode_www_form({ 30 'q' => search_word, 31 'count' => count 32 # 'offset' => 150(指定した数だけ検索結果をスキップ) 33}) 34request = Net::HTTP::Post.new(uri.request_uri) 35request['Content-Type'] = 'multipart/form-data' 36request['Ocp-Apim-Subscription-Key'] = "自分のAPIキー" # Fix Me 37request.body = "{body}" 38response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http| 39 http.request(request) 40end 41 42# searchwordの検索画像をcountの枚数だけ保存する 43count.times do |i| 44 begin 45 image_url = JSON.parse(response.body)["value"][i]["thumbnailUrl"] 46 save_image(image_url, i) 47 rescue => e 48 puts "image#{i} is error!" 49 puts e 50 end 51end 52

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

image0 is error! undefined method `[]' for nil:NilClass image1 is error! undefined method `[]' for nil:NilClass image2 is error! undefined method `[]' for nil:NilClass image3 is error! undefined method `[]' for nil:NilClass image4 is error! undefined method `[]' for nil:NilClass image5 is error! undefined method `[]' for nil:NilClass image6 is error! undefined method `[]' for nil:NilClass image7 is error! undefined method `[]' for nil:NilClass image8 is error! undefined method `[]' for nil:NilClass image9 is error! undefined method `[]' for nil:NilClass

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問