我正在http://h10010.www1.hp.com/wwpc/ie/en/ho/WF06b/321957-321957-3329742-89318-89318-5186820-5231694.html?dnr=1
此的完整代码位于https://gist.github.com/3156035
该网页使用了没有CSS的老式html表,所以我使用xpath来查找某些关键字(线索),然后将下一个元素作为目标。关键字然后进入下面的循环
clues.each do |clue|
#putting the output into quotes, incase the content contains a comma!
csv_text << ""#{doc.at_xpath("//td[text()='#{clue}']/following-sibling::td").text.strip}""
csv_text << ", " unless clues.last == clue
end
由于数组使用,
分隔值,我可以将每个值添加到csv中自己的单元格中,这很好,但单元格保修显示为"1年,取货和退货,零件和劳动力"
代码将其切碎并放入3个单元格:"1年",然后"提货和退货",然后是"零件和劳动力"
我想要的是让它保持为一个单独的细胞:"1年,提货和退货,零件和劳动力"
如何将代码更改为而不是匹配单元格中的逗号?
令人困惑的是,当你真的在问如何创建一个合适的CSV时,你却把这当成了一个Nokogiri问题。
我建议使用CSV库:
CSV.open("path/to/output.csv", "wb") do |csv|
#loop here over all your pages to scrape
csv << clues.map{|clue| doc.at("//td[text()='#{clue}']/following-sibling::td").text.strip}
#end loop
end
这将自动创建有效的CSV,其中任何逗号都包含正确引用的条目。