2016-07-22 122 views
-2

我想从下面的代码块中data-original-title获得价值12:40 PM - 1 Mar 2016属性的值:如何获得使用引入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 - 2016年3月1日'在HTML标记中不存在。也许你的意思是'12:40 PM - 2016年3月1日'这确实存在?我们希望看到您的代码。虽然看起来你尝试了一些东西,但是显示你的代码可以帮助我们修复它,而不是扔掉无关的答案。请阅读“[问]”和链接页面以及“[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 - 2016年3月1日”' – 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')'。它做同样的事情,但更容易阅读和保存输入。 –