2016-07-22 6 views
-2

Я пытаюсь получить значение 12:40 PM - 1 Mar 2016 из data-original-title в следующем блоке кода с использованием Nokogiri:Как получить значение атрибута с помощью 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(".ProfileHead‌​erCard-joinDateText.js-tooltip.u-dir")

Но я не могу достичь этого конкретного значения.

+1

Значение '3:40 AM - 1 марта 2016' не существует в теге HTML. Возможно, вы имели в виду «12:40 PM - 1 марта 2016 года», который существует? Мы хотели бы видеть ваш код. Хотя похоже, что вы что-то пробовали, показ вашего кода помогает нам исправить это, а не просто отбрасывать несвязанные ответы. Пожалуйста, прочитайте «[ask]» и связанные страницы и «[mcve]». –

+0

@ the Tin Man Извините, вот мой код 'Nokogiri :: HTML (open (" https://twitter.com/F_Casadei?lang=en ")). Css (" .ProfileHeaderCard-joinDateText.js-tooltip.u -dir ")', и вы правы, я пытаюсь получить '' 12:40 PM - 1 марта 2016 года '' – Eric

+0

. Пожалуйста, добавьте код к вопросу, отредактировав его, добавив изменения, которые у вас были бы, если бы вы вставил его изначально. Пожалуйста, не используйте в тексте теги «изменить» или «обновить»; Мы можем видеть, что изменилось, и когда нам нужно. –

ответ

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> 

См [] и []= "Modifying Nodes and Attributes" в документации.

0

Вы можете сделать это, используя 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') 
+1

Вместо 'css ('span'). First', используйте' at ('span') '. Он делает то же самое, но легче читать и сохраняет ввод текста. –

Смежные вопросы