前提・実現したいこと
Rails、nokogiriを利用しyoutubeからのスクレイピングをしようと試みています。
本サイトで以前ご質問されていた方のソースコードを拝借し実装中ですが、動画の視聴回数が全て0で返ってきます。そこで、自分でchromeのディベロッパーツールを用いxpathを取得し、指定しているのですが、0すら返ってこなくなりました。他の要素もディベロッパーツールで確認できるxpathと拝借したソースコードのxpathが異なり、ディベロッパーツールで確認できるxpathを指定するとデータが取得できません。
Youtubeのxpathはどこを参照すれば良いのでしょうか。
ぜひご教授ください。
該当のソースコード
Ruby
1class Video < ApplicationRecord 2 3 # encoding: utf-8 4 5 # URLにアクセスするためのライブラリの読み込み 6 require 'open-uri' 7 # Nokogiriライブラリの読み込み 8 require 'nokogiri' 9 require 'uri' 10 11 12def self.get 13 # 前半部では、検索ワードに関連するリンクの一覧を取得する。 14 15 urls = [] 16 # 配列の宣言 17 search_q="アウディ" 18 search_term = URI.encode(search_q) 19 # サーチタームを定義。URIオブジェクトのencodeメソッドでutf-8に対応している? 20 url="https://www.youtube.com/results?search_query=#{search_term}" 21 # urlは普通に、YouTubeの検索した時のurl。 22 23 doc=Nokogiri::HTML(open(url)) 24 # ノコギリで、urlを開いてdocという変数へ入れる。 25 elements=doc.xpath("//h3[@class='yt-lockup-title ']/a") 26 # 要素の切り出しをxpathを使って行う。 h3タグでyt-lookup-title(注意:末尾に半角スペース1つ入ります!)というクラスが付与された要素下のa要素を取得。 27 elements.each do |a| 28 # その中のリンク要素それぞれを取り出す。 29 code = a.attributes['href'].value 30 # そして、その要素が持つhref属性、すなわちアドレスを取得する。 31 urls << "https://www.youtube.com" + code if code.include?('watch') 32 # 配列宣言しておいたurlsにそれぞれのアドレスをお尻に付加した、youtubeのアドレスをぶっこんでいく。 33 end 34 35 # 後半部では、各リンクの中の要素を取得していく。 36 urls.each do |url| 37 # それぞれのurlについて情報を吐き出させる。 38 doc = Nokogiri::HTML(open(url),nil,"UTF-8") 39 video = Video.new 40 41 # 動画URLを取得 42 video.url = url 43 # 動画のタイトルを取得 44 video.title = doc.xpath("//h1['watch-headline-title']/span").text.gsub(/\n /,'').gsub(/\n /,'') 45 # 動画の説明文を取得 46 video.description = doc.xpath("//p[@id='eow-description']").text 47 48 49 # 動画の視聴回数を取得 50 video.views = doc.xpath('//*[@id="count"]/yt-view-count-renderer/span[2]').text 51 52 53 # 動画のチャンネルを取得 54 video.chnnnel = doc.xpath("//*[@id='watch7-user-header']/div/a").text 55 56 video.save 57 end 58 59end 60 61 62 63end 64
試したこと
参照ソースコードのxpathから、ディベロッパーツールでのxpathに変更しました。
Ruby
1#元々のxpath 2video.views = doc.xpath("//*[@id='watch7-views-info']/div[1]").text 3 4#変更後 5video.views = doc.xpath('//*[@id="count"]/yt-view-count-renderer/span[2]').text

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。