我如何使用Nokogiri在铁轨中使用URL获取HTML主体



我想从URL中解析身体属性。

例如:

url = 'http://rca.yandex.com/?key=rca.1.1.20140120T051507Z.3db118ab435efdff.6c84331313b6b7d66abd191410f72e0e1c3c8795&url=http://endtimeheadlines.wordpress.com/2014/01/17/think-tank-extraordinary-crisis-needed-to-preserve-new-world-order/#comment-36708?utm_source=twitterfeed&utm_medium=facebook[&callback=http://64.191.99.245:3023/posts][&full=1]'

我尝试时:

page = Nokogiri::HTML(html)

我得到:

#<Nokogiri::HTML::Document:0x52fd6d6 name="document" children=[#<Nokogiri::XML::DTD:0x52fd1f4 name="html">, #<Nokogiri::XML::Element:0x52fc6aa name="html" children=[#<Nokogiri::XML::Element:0x5301f56 name="body" children=[#<Nokogiri::XML::Element:0x53018d0 name="p" children=[#<Nokogiri::XML::Text:0x53015f6 "http://rca.yandex.com/?key=rca.1.1.20140120T051507Z.3db118ab435efdff.6c84331313b6b7d66abd191410f72e0e1c3c8795&url=http://endtimeheadlines.wordpress.com/2014/01/17/think-tank-extraordinary-crisis-needed-to-preserve-new-world-order/#comment-36708?utm_source=twitterfeed&utm_medium=facebook[&callback=http://64.191.99.245:3023/posts][&full=1]">]>]>]>]>

如何在此URL中获得属性?

例如:page.css("div")。我想从HTML body

获得该值

尚不清楚您要做什么,但这可能会有所帮助:

require 'nokogiri'
html = '<html><head><title>foo</title><body><p>bar</p></body></html>'
doc = Nokogiri::HTML(html)

使用at,您会发现标签的第一次出现,这在HTML文档中是明智的,因为您只能有一个<body>标签。

doc.at('body') # => #<Nokogiri::XML::Element:0x3ff194d24cd4 name="body" children=[#<Nokogiri::XML::Element:0x3ff194d24acc name="p" children=[#<Nokogiri::XML::Text:0x3ff194d248c4 "bar">]>]>

如果您想要标签的孩子,请使用children检索它们:

doc.at('body').children # => [#<Nokogiri::XML::Element:0x3ff194d24acc name="p" children=[#<Nokogiri::XML::Text:0x3ff194d248c4 "bar">]>]

如果您想将孩子节点作为html:

doc.at('body').children.to_html # => "<p>bar</p>"
doc.at('body').inner_html # => "<p>bar</p>"

如果您想要身体标签的文本内容:

doc.at('body').content # => "bar"
doc.at('body').text # => "bar"

,如果通过"属性",您确实是指<body>标签的attributes本身:

require 'nokogiri'
html = '<html><head><title>foo</title><body on_load="do_something()"><p>bar</p></body></html>'
doc = Nokogiri::HTML(html)
doc.at('body').attributes # => {"on_load"=>#<Nokogiri::XML::Attr:0x3fdc3d923ca0 name="on_load" value="do_something()">}
doc.at('body')['on_load'] # => "do_something()"

attributes返回哈希,因此您可以直接访问所需的任何内容。作为快捷方式,Nokogiri :: XML :: Node也理解[]为我们提供了典型的哈希风格访问该值。

page.css('body')应该起作用。如果不尝试使用to_s

您可以根据需要使用to_xmlto_html或其他格式。请参考其他格式选项的Nokogiri文档。

page = Nokogiri::HTML(html)
page.to_xml

,要在document中获得div的主体,请使用:

divs = page.css('div') # returns either string or array depending upon the number of divs in your document.
divs.to_xml

当然,您可以从链接中获得解析的 html/xml 树。在你的示例中:

page.css("div")

您只需在解析文档中以Array的形式将所有divS。您可以一对一地枚举它们,并获得div的每个文本:

page.css("div").each do| div |
   p div.text
end

最新更新