我有像
这样的代码#!/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随机页面中提取单引号并将它们放入单独的数组中。
答案 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
注意指出的差异。一旦你注意到“标签”是“标签”对象的集合,它就会很明显。