Разбор HTML с Nokogiri
У меня есть HTML-документ, который мне нужно очистить для определенных строк. Документ представляет собой плейлист YouTube. Например:
require 'open-uri'
doc = Nokogiri::HTML(open("https://www.youtube.com/playlist?list=PL11CE9468C379D2C8"))
Когда я просматриваю исходный код HTML, я вижу нужную мне строку.
<tr class="pl-video yt-uix-tile " data-title="Tyler The Creator - Yonkers" data-video-id="XSbZidsgMfw"
Строка - это то, что следует data-video-id
в цитатах. В этом плейлисте есть 7 видео, поэтому есть 7 примеров этого кода, каждый с разными data-video-id
, Как я могу перебрать и сохранить каждую из этих строк в @scraped_id
переменная?
Идентификатор сохраняется с помощью
@video = @stream.videos.find_or_initialize_by(url: @scraped_id)
@video.save
1 ответ
Решение
Вы можете использовать селектор CSS, чтобы выбрать все элементы, которые имеют data-video-id
атрибут, а затем принять значение этого атрибута.
doc.css("[data-video-id]").each do |el|
@scraped_id = el.attr('data-video-id')
@video = @stream.videos.find_or_initialize_by(url: @scraped_id)
@video.save
end