Разбирайте HTML с помощью Nokogiri
61
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
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
Решение
62
Вы можете использовать селектор 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
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
Ваш ответ
Еще в рубрике
129
Потребление памяти при использовании Nokogiri и XML
62
Почему элементы таблицы HTML имеют вкладки и символы новой строки, это только для удобства чтения
-4
Почему Nokogiri возвращает тарабарщину при анализе ответа от XML API?
97
При необходимости объяснения веб-соскабливания с помощью Nokogiri in Rails