Как получить значение атрибута с помощью Nokogiri
Я пытаюсь получить значение 12:40 PM - 1 Mar 2016
от data-original-title
в следующем блоке кода с использованием Nokogiri:
<span class="ProfileHeaderCard-joinDateText js-tooltip u-dir" dir="ltr" data-original-title="12:40 PM - 1 Mar 2016">Joined March 2016</span>
Я успешно достиг глобального узла:
[#<Nokogiri::XML::Element:0x3ff7899f7b60 name="span" attributes=[#<Nokogiri::XML::Attr:0x3ff7899f9ec4 name="class" value="ProfileHeaderCard-joinDateText js-tooltip u-dir">, #<Nokogiri::XML::Attr:0x3ff7899f9e9c name="dir" value="ltr">, #<Nokogiri::XML::Attr:0x3ff7899f9e88 name="title" value="3:40 AM - 1 Mar 2016">] children=[#<Nokogiri::XML::Text:0x3ff7899f8790 "Joined March 2016">]>]
используя этот код Nokogiri::HTML(open("https://twitter.com/F_Casadei?lang=en")).css(".ProfileHeaderCard-joinDateText.js-tooltip.u-dir")
Но я не могу достичь этого конкретного значения.
2 ответа
Решение
Идиоматично обращаться к значениям параметров, рассматривая узел как хеш:
require 'nokogiri'
doc = Nokogiri::HTML('<div class="foo"></div>')
doc.at('div')['class'] # => "foo"
И, подобно хешу, вы также можете назначить ему:
doc.at('div')['class'] = 'bar'
puts doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body><div class="bar"></div></body></html>
Увидеть []
а также []=
" Модификация узлов и атрибутов " в документации.
Вы можете сделать это, используя метод attr:
require 'nokogiri'
html = '<span class="ProfileHeaderCard-joinDateText js-tooltip u-dir" dir="ltr" data-original-title="12:40 PM - 1 Mar 2016">Joined March 2016</span>'
doc = Nokogiri::HTML(html)
span = doc.at('span').first
title = span.attr('data-original-title')