Nokogiri返回“无方法错误”
我一直在我的程序中收到同样的错误。我已经写了一个方法,需要一些凌乱的HTML并将其变成整洁的字符串。这工作对自己很好,但是当我运行整个程序我得到以下错误:Nokogiri返回“无方法错误”
kamer.rb:9:in `normalise_instrumentation': undefined method `split' for #<Nokogiri::XML::NodeSet:0x007f92cb93bfb0> (NoMethodError)
我会了解为何出现这种情况,以及如何阻止它的任何信息或建议,真的很感谢。
的代码是在这里:
require 'nokogiri'
require 'open-uri'
def normalise_instrumentation(instrumentation)
messy_array = instrumentation.split('.')
normal_array = []
messy_array.each do |section|
if section =~ /\A\d+\z/
normal_array << section
end
end
return normal_array
end
doc = Nokogiri::HTML(open('http://www.cs.vu.nl/~rutger/vuko/nl/lijst_van_ooit/complete-solo.html'))
table = doc.css('table[summary=works] tr')
work_value = []
work_hash = {}
table.each do |row|
piece = [row.css('td[1]'), row.css('td[2]'), row.css('td[3]')].map { |r|
r.text.strip!
}
work_value = work_value.push(piece)
work_key = normalise_instrumentation(row.css('td[3]'))
work_hash[work_key] = work_value
end
puts work_hash
的问题是在这里:
row.css('td[3]')
这里的原因:
row.css('td[3]').class
# => Nokogiri::XML::NodeSet < Object
您建立piece
阵列,然后成为一个数组的NodeSets,这可能不是你想要的,因为text
针对Nod eSet通常会从多个节点返回一个奇怪的连接文本字符串。你不会在这里发生这种情况,因为你在连续搜索(<tr>
),但是如果你想看一个级别,在<table>
,你会有一把竖起的枪指着你的脚。
传递一个NodeSet到你的normalise_instrumentation
方法是一个问题,因为NodeSet没有split
方法,这是你看到的错误。
但是,它变得更糟之前,它变得更好。 css
,如search
和xpath
返回一个NodeSet,类似于一个Array。将类似数组的小动物传递给方法仍然会导致混淆,因为您确实只需要找到节点,而不是一组节点。所以我可能会使用:
row.at('td[3]')
这将只返回节点。
此时,你可能希望该节点的text
,像
row.at('td[3]').text
会更有意义,因为这样的方法会得到一个字符串,里面确实有一个split
方法。
但是,它似乎还有其他问题,因为你想要的一些单元不存在,所以你也会得到零值。
这不是我更好的答案之一,因为我仍然在试图琢磨你在做什么。向我们提供您需要解析的HTML的最小示例以及您想要捕获的输出,这将有助于我们微调您的代码以获得您想要的内容。
谢谢你。我一直在对Nokogiri做进一步的研究,因为我认为这将帮助我理解发生了什么。 HTML中的每个
最终结果将是用户搜索整齐的乐器匹配键,程序将返回音乐作品的名称,作曲家和完整的乐器。 – pgannz 2014-10-19 17:19:02
如果HTML看起来像那样,那么它的格式不正确。 Nokogiri将尝试修复它,并且可能会或可能不会成功。你需要看看它是什么。检查解析后返回的文档的'errors'方法以查看。 – 2014-10-20 02:49:29
- 1. 错误返回码
- 2. audioContext.decodeAudioData 返回null 错误
- 3. 记gitlab返回403错误
- 4. cx_Oracel返回错误信息
- 5. (4/8)枚举的错误用法 之 方法返回值
- 6. 远程服务器返回错误: (405) 不容许的方法
- 7. 远程服务器返回错误: (405) 不容许的方法。
- 8. ThinkPHP5.1 workerman扩展返回文件mimetype错误的解决方法
- 9. Windows开发时IsWindowVisible返回错误的处理方法
- 10. WIN10下调用waveInOpen方法失败返回错误1的解决方法
- 11. ssm使用ajax返回总是error错误返回的是object
- 12. gem install nokogiri -v '1.6.6.2' 出错
- 13. springboot validation 统一返回错误信息
- 14. AcPlPlotEngine::beginGenerateGraphics() 返回Acad::eGraphicsNotGenerated的错误
- 15. C# WebApi 返回详细错误信息
- 16. MongoDB db.collection.count()返回结果总数错误
- 17. laravel 5.5 ajax返回错误信息
- 18. laravel返回统一格式错误码
- 19. Scrapy shell调试返回403错误
- 20. laravel 返回ajax请求错误信息
- 21. post提交数据返回404错误
- 22. springmvc返回json数据错误
- 23. 微信支付-返回签名错误
- 24. 使用ResponseBody页面返回406错误
- 25. errno返回值的对应错误码
- 26. socket链接返回错误码
- 27. python错误记录:__repr__返回string
- 28. Spring验证的错误返回------BindingResult
- 29. vcpkg WinHttpQueryDataAvailable 返回错误代码 12002
- 30. leetcod的tfind返回错误的指针
首先,欢迎来到Stack Overflow。没有必要为学习道歉。只要做你的研究,问一些周到的,写得很好的问题,我们很乐意帮忙。 – 2014-10-16 22:36:32
如果您包含您遇到的HTML的最小示例,以及您想要的代码之外的数据类型的示例,它确实有帮助。如果没有这些,我们必须修补猜测,并发挥我们并不擅长的思维阅读器游戏。所以,帮助我们帮助你。 – 2014-10-16 22:39:41
谢谢你的鼓励!并感谢发布提示。将来一定会这样做。我非常感谢你的时间! – pgannz 2014-10-19 17:11:54