Разбор 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
Другие вопросы по тегам