在Ruby中格式化/组织数据

时间:2014-02-14 19:48:42

标签: ruby nokogiri

我有刮刀,刮黄页。它正确输出我的所有数据。我想弄清楚的是如何或多或少地将输出格式化为彼此相邻排列。因此,而不是像

那样的输出
  

dataSet1的

     

Dataset2

     

Dataset3

我想将其格式化为

  

Dataset1 Dataset2 Dataset3

所以现在数据在列中相互排列,而不是一行。

我会发布我的代码。

require 'nokogiri'
require 'open-uri'

page = Nokogiri::HTML(open("http://www.yellowpages.com/austin-tx/screen-printing?g=Austin%2C+TX&q=screen+printing"))

business_name = page.css("div.srp-business-name")
#links = page.css("a.track-visit-website")
phone_number = page.css("span.business-phone")


companies = page.css('#results div.result')
companies.each do |company|
    website_link = company.at_css("a.track-visit-website")
    if website_link
        puts website_link['href']
    else
        puts 'no website'
    end
end

puts phone_number.text
puts business_name.text

3 个答案:

答案 0 :(得分:1)

如果我的问题很好,那与Nokogiri无关。您可能希望使用print而不是puts,它会在不添加新行的情况下打印字符串。

或者,

companies = page.css('#results div.result')
website_links = []
companies.each do |company|
    website_link = company.at_css("a.track-visit-website")
    website_links << website_link || 'no website'
end

puts "#{website_links.join(' ')}, #{phone_number.text}, #{business_name.text}"

答案 1 :(得分:0)

不知道你对Ruby的熟悉程度,但我在这种情况下所做的就是使用irb(如果不熟悉则查找)。我逐行输入代码。然后我检查变量,看看发生了什么,然后尝试一些解决方案。

在您的情况下,您获得的phone_number.text采用以下格式:

"\nDataset1\n\nDataset2\n\nDataset3\n\nDataset4\n" 

这解释了你的结果。如果你剥离它,它只会删除字符串开头和结尾的换行符。

您需要做的是使用类似gsub的内容来替换所有换行符(或者您想要的任何内容)。我选择以空间为例。

puts phone_number.text.strip.gsub("\n", " ")

将打印出来:

"Dataset1  Dataset2  Dataset3  Dataset4"

答案 2 :(得分:-1)

我还没想到它,但是在同一时间能够以更易读的版本格式化它,所以我现在要把它叫做退出。我可以在以后使用该功能。如果你想玩它,这是脚本。

companies = doc.css('#results div.result')

companies.each do | info|
   business_name = info.at_css('div.srp-business-name')
   phone_number = info.at_css("span.business-phone")
   website_link = info.at_css("a.track-visit-website")

   if business_name
      puts business_name.text
      puts phone_number.text
      if website_link
         puts website_link['href']
         puts "----------------------------"
      else
         puts "no website"
         puts "----------------------------"
      end
   end
end