スクレイピングツールはnokogiriを使います
問題
- 検証ツールでカーソルを合わせると要素が表示されるのに、その要素を指定して取得しようとすると失敗する
僕の場合、動画をダウンロードするためurlを取得しようとしたらこの問題に陥った
この記事ではmp4ファイルを取得するのがゴールとする
その過程でもう一つの問題
- javascriptで作られた要素が取得できない
こちらに関しては強引に解決したので、あまり参考にならないかもしれない
原因
取得したい要素がiframeタグに囲まれている
srcで指定したurlから読み込んでいるため、iframeタグ内の要素は取得できない
解決過程
iframeのsrcを取得し、そのurlを取得してその中身を取得します
doc = Nokogiri::HTML5(URI.open(url))
iframe = "https:#{doc.at_css("iframe").attr("src")}"
一旦iframeの中身を確認
index.htmlに保存
file = "./index.html"
open(file, "wb") do |file|
file.print open(url).read
end
web上のブラウザでカーソルを合わせるとvideoタグが現れる。
そこにmp4のurlがあるのだが、index.htmlにはvideoタグがない
どうやらjavascriptで生成されている様子
だがscriptタグの中にそれっぽいurlを発見
<body>
.
.
<script>
.
.
const args = {"id":".....","src":"..mp4","text":"...
javascriptのハッシュの中に定義されている様子
javascriptの定数をrubyに渡す方法など知らないので、scriptタグの中身を取得し、正規表現で削っていく
iframe_doc = Nokogiri::HTML5(URI.open(iframe))
script = iframe_doc.at("body script").text
rough = script.match(/\"src\"\:.*\.mp4\"\,\"title\"/).to_s
mp4ファイルが複数記述されてたので、その前後も含めて切り取る
こっから正規表現によって強引に削ってurl取得
完