【发布时间】:2014-07-25 08:42:49
【问题描述】:
考虑以下 HTML:
<div class='data'>
<div class='user_name'>Lankesh</div>
<div class='user_details'>
<div class='country'>Srilanka</div>
<div class='age'>9</div>
</div>
<div class='user_name'>Bob</div>
<div class='user_details'>
<div class='country'>US</div>
<div class='age'>54</div>
</div>
<div class='user_name'>Deiter</div>
<div class='user_details'>
<div class='country'>Germany</div>
<div class='age'>34</div>
</div>
<div class='user_name'>Yakob</div>
<div class='user_details'>
<div class='country'>Syria</div>
<div class='age'>90</div>
</div>
<div class='user_name'>Qureshi</div>
<div class='user_details'>
<div class='country'>Afgan</div>
<div class='age'>56</div>
</div>
<div class='user_name'>Smith George</div>
<div class='user_details'>
<div class='country'>India</div>
<div class='age'>23</div>
</div>
</div>
还有以下 Ruby 代码:
require 'nokogiri'
sample_html = File.open("r.htm", "r").read
n = Nokogiri::HTML::parse sample_html
xpaths = {}
xpaths[:name] = "//div[@class = 'user_name']/text()"
xpaths[:country] = "//div[@class = 'country']/text()"
xpaths[:age] = "//div[@class = 'age']/text()"
full_path = xpaths.values.join(" | ")
n.xpath(full_path).each do |i|
puts i
end
这可以提取数据,但我如何分块(姓名、年龄和国家),以便我可以更轻松地将解析后的数据提取到结构中。
- 由于名称在 user_details 块之外,我无法编写如下查询:
//div[@class = 'user_details']并提取每个属性。 - 我知道我可以将数组分成 3 个组;但我正在寻找基于 xpath 的解决方案,因为我的实际需要有不同数量的子属性。
- 很傻,但是:无论如何,在解析期间以某种方式将字符注入到提取的文本中?
有什么想法吗?
【问题讨论】: