Rails,スクレイピング初心者のものです。
###前提・実現したいこと
APIを使わないYoutubeのスクレイピング機能の実装。
viewから@Youtube.id(1).titleのように呼び出せるようにしたい。
###発生している問題・エラーメッセージ
以下のようなソースコード(1)で、ターミナル上で実行すると、タイトル等の取得は成功しているようです。ですが、これをモデルに対してセーブをして、Railsのビューにてこれを@Youtube.id(1).title,@Youtube.id(1).descriptionのようにして取得する方法についてはわからず、ご指導いただければと思い質問しました。
自分でやってみたこととしては、ソースコード(2)のようなものです。
そもそもこうした方向性自体が間違っているのか、それともコードのディテールの問題なのかがわかりません。
これだと
/scrape.rb:75:in `block in <main>': uninitialized constant Entry (NameError)
が発生してしまいます。
結果はuninitialized constant Entry (NameError)になってしまっています。
**__ (追記)ソースコードの場所:app/models/scrape.rb
__ **
###ソースコード⑴
Ruby
1 2# encoding: utf-8 3 4# URLにアクセスするためのライブラリの読み込み 5require 'open-uri' 6 7# Nokogiriライブラリの読み込み 8require 'nokogiri' 9require 'uri' 10 11# 前半部では、検索ワードに関連するリンクの一覧を取得する。 12 urls = [] 13 search_term = URI.encode("キーワード") 14 url="https://www.youtube.com/results?search_query=#{search_term}" 15 doc=Nokogiri::HTML(open(url)) 16 elements=doc.xpath("//h3[@class='yt-lockup-title ']/a") 17 elements.each do |a| 18 code = a.attributes['href'].value 19 urls << "https://www.youtube.com" + code if code.include?('watch') 20 end 21 22# 後半部では、リンク先内容の出力と、文章整形。 23 urls.each do |url| 24 doc =Nokogiri::HTML(open(url),nil,"UTF-8") 25 title = doc.xpath("//h1['watch-headline-title']/span").text.gsub(/¥n/,'') 26 description = doc.xpath("//p[@id='eow-description']").text 27 puts title 28 puts description 29 end
###ソースコード(2)
Ruby
1# encoding: utf-8 2 3# URLにアクセスするためのライブラリの読み込み 4require 'open-uri' 5 6# Nokogiriライブラリの読み込み 7require 'nokogiri' 8require 'uri' 9 10# 前半部では、検索ワードに関連するリンクの一覧を取得する。 11 12 urls = [] 13 search_term = URI.encode("キーワード") 14 url="https://www.youtube.com/results?search_query=#{search_term}" 15 doc=Nokogiri::HTML(open(url)) 16 elements=doc.xpath("//h3[@class='yt-lockup-title ']/a") 17 elements.each do |a| 18 code = a.attributes['href'].value 19 urls << "https://www.youtube.com" + code if code.include?('watch') 20 end 21 22# 後半部では、リンク先内容の出力と、文章整形、そしてモデルへの保存。 23 24 urls.each do |url| 25 entry=Entry.new 26 entry.title = doc.xpath("//h1['watch-headline-title']/span").text.gsub(/¥n/,'') 27 entry.description = doc.xpath("//p[@id='eow-description']").text 28 entry.save 29 end 30
ご指導宜しくお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 4.2
ruby 2.2.2
修正しました。
回答1件
あなたの回答
tips
プレビュー