前提・実現したいこと
スクレイピングしたデータをデータベースに取得したい。
発生している問題
コンソール上にはimageパスがあり取得できていることはわかるのだけど、データベースのimageカラムはnullになる。実は画像アップロード用のgem、carrierwaveをインストールする前は正常に動いていたのですが、インストール後におかしくなったと思われる。
AND shoes
.image
= 'https://item-shopping.c.yimg.jp/i/g/e-minerva_9902010186'
該当のソースコード
ruby
1def self.get_content() 2 thisurl = "http://kakaku.com" 3 page_url = "/search_results/%8CC%81E%83V%83%85%81%5B%83Y/" 4 for page in 1..2 do 5 url = thisurl + page_url 6 charset = nil 7 html = open(url) do |f| 8 charset = f.charset # 文字種別を取得 9 f.read # htmlを読み込んで変数htmlに渡す 10 end 11 doc = Nokogiri::HTML.parse(html.toutf8, nil, 'utf-8') 12 13 for i in 1..30 do 14 str_num = i.to_s 15 fixed_num = "%02d" % str_num 16 all_name = doc.css('.item'+fixed_num) 17 explanation = all_name.css('li.searchitem').inner_text 18 19 name = get_name(all_name) 20 image = get_image(all_name) 21 size = get_size(all_name, explanation) 22 type = get_type(all_name, explanation) 23 24 shoe = Shoe.where(name: name, image: image, size_id: size, type_id: type).first_or_initialize 25 shoe.save 26 27 end 28 next_html = doc.css('.pagenation > ul > li.nextPage a') 29 # unless next_html 30 page_url = next_html.attribute('href') 31 32 end 33 end 34 35def self.get_image(all_name) 36 # 画像を取得 37 category_image = all_name.css('.itemphoto a img') 38 image = category_image.attribute('data-original').value 39 return image 40end
やってみたこと
shoe = Shoe.where(name: name, image: image, size_id: size, type_id: type).first_or_initialize
image: imageをimage: nameに変えてみる → nullに変化なし(データベース側の問題?)
そこで
imageカラムの削除・再設定 → 変化なし
この作業以前にしていたcarrierwaveのインストールに伴うおまじないで不必要なものを削除
補足情報
開発環境:could9
ruby: 2.3.1p112
rails: 4.2.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。