我有刮刀,刮黄页。它正确输出我的所有数据。我想弄清楚的是如何或多或少地将输出格式化为彼此相邻排列。因此,而不是像
那样的输出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
答案 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