Разбирайте HTML с помощью Nokogiri

63
2

У меня есть 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

спросил(а) 2021-01-19T15:48:55+03:00 6 месяцев назад
1
Решение
64

Вы можете использовать селектор 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

ответил(а) 2021-01-19T15:48:55+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема