为什么我无法从链接元素中检索 URL 格式的文本?



我正在解析一个RSS提要,该提要中有一个元素<link>,其中有一个url,比如<link>http://www.google.com/</link>;但是,当我尝试使用node.css('link').text获取url时,它会返回一个空字符串。我应该访问另一个属性吗?

我正在使用nokogiri/ruby。

示例:

doc = Nokogiri::HTML(open('http://www.kffl.com/printRSS.php/NFL-ARI'))
    doc.css('item').each do |item|
    puts item.css('link').text
    puts item.css('link').first.text
end

您正在解析为HTML,但源代码是XML。在HTML中,link元素是空的,因此Nokogiri将其解析为类似<link></link>http://example.com ...的内容,其中url是link元素之外的文本节点。然后查询解析后的文档时,link元素为空。

要修复它,您应该解析为XML:

doc = Nokogiri::XML(open('http://www.kffl.com/printRSS.php/NFL-ARI'))
  # ...

尝试获取该选择器返回的"第一个"项目的文本:

node.css('link').first.text # => "http://www.google.com/" 

我不知道为什么Nokogiri不识别这里的链接,但在这种情况下,xpath总是会来拯救:

doc = Nokogiri::HTML(open('http://www.kffl.com/printRSS.php/NFL-ARI'))
doc.css('item').each do |item|
  puts item.xpath("//item['link']/text()").text
end

您可以使用.text?方法来确定它是一个文本节点。和next方法来获取文本(获取下一个元素)。

doc = Nokogiri::HTML(open('http://www.kffl.com/printRSS.php/NFL-ARI'))
doc.css('item')[0].css('link').first.text?
# => false
doc.css('item')[0].css('link').first.next.text?
# => true
doc.css('item')[0].css('link').first.next.text
# => "http://www.kffl.com/gnews.php?id=901900-cardinals-tyrann-mathieu-expected-to-start-camp-on-pupn            "

我不知道为什么

相关内容

  • 没有找到相关文章

最新更新