Ruby nokogiri doc.xpath(';head';)返回nil

Ruby nokogiri doc.xpath(';head';)返回nil,ruby,nokogiri,Ruby,Nokogiri,我试图获取在给定html的head部分声明的所有脚本,但无论我如何尝试,它总是返回nil doc = Nokogiri::HTML(open('http://www.walmart.com.br/')) puts doc.at('body') # returns nill doc.xpath('//html/head').each # this also will never iterate 有什么建议吗?好的,当我在脚本/控制台中尝试它时,我确实可以得到一些有用的东西: doc.at('

我试图获取在给定html的head部分声明的所有脚本,但无论我如何尝试,它总是返回nil

doc = Nokogiri::HTML(open('http://www.walmart.com.br/'))

puts doc.at('body') # returns nill

doc.xpath('//html/head').each # this also will never iterate

有什么建议吗?

好的,当我在脚本/控制台中尝试它时,我确实可以得到一些有用的东西:

doc.at('body')
所以我不确定你到底出了什么问题

对于html head,我也无法获取head元素。html可以很好地工作,但head无论如何都不行

我觉得沃尔玛的页面有点不对劲。我试着为你做同样的事情

Nokogiri::HTML(open('http://google.com/')) 
而且效果很好。 所以除非你能弄清楚他们在做什么阻止你访问页面的某些部分。。。那我就不知道了

如果您可以处理文档中的所有脚本,我发现这一个非常好:

doc.xpath('//script')

好的,当我在脚本/控制台中尝试时,我确实可以得到一些有用的东西:

doc.at('body')
所以我不确定你到底出了什么问题

对于html head,我也无法获取head元素。html可以很好地工作,但head无论如何都不行

我觉得沃尔玛的页面有点不对劲。我试着为你做同样的事情

Nokogiri::HTML(open('http://google.com/')) 
而且效果很好。 所以除非你能弄清楚他们在做什么阻止你访问页面的某些部分。。。那我就不知道了

如果您可以处理文档中的所有脚本,我发现这一个非常好:

doc.xpath('//script')

该页的DOCTYPE无效,因此Nokogiri无法正确解析该页。快速、低效地解决问题:

require 'nokogiri'
require 'open-uri'
require 'pp'

# Request the HTML before parsing
html = open("http://www.walmart.com.br/").read

# Replace original DOCTYPE with a valid DOCTYPE
html = html.sub(/^<!DOCTYPE html(.*)$/, '<!DOCTYPE html>')

# Parse
doc = Nokogiri::HTML(html)

# Party.
pp doc.xpath("/html/head")
需要“nokogiri”
需要“打开uri”
需要“pp”
#在解析之前请求HTML
html=打开(“http://www.walmart.com.br/)读
#用有效的DOCTYPE替换原始DOCTYPE

html=html.sub(/^该页的DOCTYPE无效,因此Nokogiri对该页的解析不正确。快速、低效地解决该问题:

require 'nokogiri'
require 'open-uri'
require 'pp'

# Request the HTML before parsing
html = open("http://www.walmart.com.br/").read

# Replace original DOCTYPE with a valid DOCTYPE
html = html.sub(/^<!DOCTYPE html(.*)$/, '<!DOCTYPE html>')

# Parse
doc = Nokogiri::HTML(html)

# Party.
pp doc.xpath("/html/head")
需要“nokogiri”
需要“打开uri”
需要“pp”
#在解析之前请求HTML
html=打开(“http://www.walmart.com.br/“)。阅读
#用有效的DOCTYPE替换原始DOCTYPE

html=html.sub(//^True!如果我使用//script调用它,它会获取页面上的所有脚本,但是如果我尝试提供类似//head/script的xpath,它找不到任何脚本。True!如果我使用//script调用它,它会获取页面上的所有脚本,但是如果我尝试提供类似//head/script的xpath,它找不到任何脚本。它工作得非常好。在我更改doctype之后,我可以使用xpath转到任何dom元素。它工作得非常好。在我更改doctype之后,我可以使用xpath访问任何dom元素。