我正在尝试将这一小段代码从scrubyt转换到nokogiri,并且在尝试将结果写入散列或xml时被卡住了。在scrubyt中,它看起来如下所示:
require 'rubygems'
require 'scrubyt'
result_data = Scrubyt::Extractor.define do
fetch "http://www.amazon.com/gp/offer-listing/0061673730"
results "//div[@class='resultsset']" do
item "//tbody/tr" do
condition "//div[@class = 'Condition']"
price "//span[@class = 'price']"
shipping "//span[@class = 'price_shipping']"
end
end
end
@description = result_data.to_xml
return @description
end使用nokogiri我可以解析出我想要的信息,但是似乎没有一种快速的方法来返回散列或xml文档中的项。这是我在nokogiri的所有东西。
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.amazon.com/gp/offer-listing/0061673730'))
doc.css('div.condition, span.price, span.price_shipping ').each do |item|
puts item.content
end 如何将项目信息返回到xml或哈希?
发布于 2009-08-19 08:26:23
您可以使用Builder来构建XML。
builder = Nokogiri::XML::Builder.new do |xml|
xml.root {
xml.items {
doc.css('div.condition, span.price, span.price_shipping').each do |o|
xml.item_content = o
end
}
}
end
puts builder.to_xml发布于 2009-08-19 23:43:44
弄清楚了..。
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.amazon.com/gp/offer-listing/0061673730'))
builder = Nokogiri::XML::Builder.new do |xml|
xml.root {
doc.xpath('//tbody[@class="result"]').each do |res|
xml.result {
res.css('span.price').each do |p|
xml.price = p.content
end
res.css('span.price_shipping').each do |s|
xml.ship = s.content
end
}
end
}
end
puts builder.to_xml结果:
<?xml version="1.0"?>
<root>
<result>
<price=>$6.09</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$6.48</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$7.12</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$7.31</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$7.52</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$7.52</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$11.53</price=>
</result>
<result>
<price=>$7.56</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$7.61</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$7.61</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$7.95</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$7.95</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$8.59</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$8.99</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$10.05</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$10.32</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$10.32</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$10.55</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$10.56</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$11.42</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$11.59</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$11.90</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$11.95</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$12.07</price=>
<ship=>+ $3.99</ship=>
</result>
<result>
<price=>$12.35</price=>
<ship=>+ $3.99</ship=>
</result>
</root>发布于 2009-08-19 22:15:05
谢谢!这正是我需要的。不过,我在正确循环时遇到了问题。
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.amazon.com/gp/offer-listing/0061673730'))
builder = Nokogiri::XML::Builder.new do |xml|
xml.root {
xml.item {
doc.css('span.price').each do |o|
xml.price = o
doc.css('span.price_shipping').each do |o|
end
end
}
}
end
puts builder.to_xml这将返回以下内容:
<?xml version="1.0"?>
<root>
<item>
<price=><span class="price">$6.09</span></price=>
<price=><span class="price">$6.48</span></price=>
<price=><span class="price">$11.95</span></price=>
<ship=><span class="price_shipping">+ $3.99</span></ship=>
<ship=><span class="price_shipping">+ $3.99</span></ship=>
<ship=><span class="price_shipping">+ $3.99</span></ship=>
</item>
</root>我如何重写我的代码来返回类似下面这样的内容:
<?xml version="1.0"?>
<root>
<item>
<price=><span class="price">$6.09</span></price=>
<ship=><span class="price_shipping">+ $3.99</span></ship=>
</item>
<item>
<price=><span class="price">$6.48</span></price=>
<ship=><span class="price_shipping">+ $3.99</span></ship=>
</item>
<item>
<price=><span class="price">$11.95</span></price=>
<ship=><span class="price_shipping">+ $3.99</span></ship=>
</item>
</root>https://stackoverflow.com/questions/1298080
复制相似问题