ruby将文本从字符串剪切到数组

时间:2013-12-04 18:04:05

标签: ruby nokogiri

我有像

这样的代码
#!/usr/bin/ruby
require 'open-uri'
require 'nokogiri'

def bash_org()
  bash = Nokogiri::HTML(open("http://bash.org/?random"),'utf-8')
  bash = bash.css("p[class='qt']").text
  print(bash.gsub("\n","").gsub("\t",""))
end

def print(text)
  if text.include? "\r"
    text = text.split("\r")
    text.each do |line|
      if !line.empty?
        puts line
      end
    end
  else
    text = text.split("<")
    text.each do |line|
      if !line.empty?
        puts "<#{line}"
      end
    end
  end
end

除了我无法区分class =“qa”标签之间的单引号外,一切都运行良好。

我想从bash随机页面中提取单引号并将它们放入单独的数组中。

1 个答案:

答案 0 :(得分:0)

好的,没关系我的评论。我想我刚才注意到了它。

目前,您的代码会获得“所有qt代码”并从中提取整个文本。通过这种方式,您可以获得一大块文本,实际上这些文本无法“分离”为单个帖子。

你已经掌握了所有的位,但你加入了他们的错误。 Nokogiri的css运算符返回集合的匹配项。只需迭代它而不是.text

请查看以下内容:

def bash_org()
  bash = Nokogiri::HTML(open("http://bash.org/?random"),'utf-8')
  tags = bash.css("p[class='qt']")    #<-- no .text here!

  tags.each{|tag|     #<-- loop over them!
    txt = tag.text    #<-- text'ize them one-by-one

    print(txt.gsub("\n","").gsub("\t",""))
    puts '------'
  }
end

注意指出的差异。一旦你注意到“标签”是“标签”对象的集合,它就会很明显。