Nokogiri 和 XPath:保存抓取的文本结果



我想将抓取的文本结果保存在文件中。这是我当前的代码:

require "rubygems"
require "open-uri"
require "nokogiri"
class Scrapper
  attr_accessor :html, :single
  def initialize(url)
    download = open(url)
    @page = Nokogiri::HTML(download)
    @html = @page.xpath('//div[@class = "quoteText"andfollowing-sibling::div[1][@class = "quoteFooter" and .//a[@href and normalize-space() = "hard-work"]]]')
  end
  def get_quotes
    @quotes_array = @html.collect {|node| node.text.strip}
    @single = @quotes_array.each do |quote|
      quote.gsub(/s{2,}/, " ") 
    end
  end
end

我知道我可以写这样的文件:

File.open('text.txt', 'w') do |fo|
    fo.write(content)

但我不知道如何合并@single来保存我的刮擦结果。最终目标是将信息插入数据库。

我遇到过一些使用 Yaml 的人,但我发现很难遵循分步指南。

谁能指出我正确的方向?

谢谢。

只需使用:

@single = @quotes_array.map do |quote|
  quote.squeeze(' ')
end
File.open('text.txt', 'w') do |fo|
  fo.puts @single
end

或:

File.open('text.txt', 'w') do |fo|
  fo.puts @quotes_array.map{ |q| q.squeeze(' ') }
end

并且不要费心创建@single.

或:

File.open('text.txt', 'w') do |fo| 
  fo.puts @html.collect { |node| node.text.strip.squeeze(' ') }
end

并且不要费心创建@single@quotes_array.

squeeze 是 String 类的一部分。这是来自文档:

"  now   is  the".squeeze(" ")         #=> " now is the"

相关内容

  • 没有找到相关文章

最新更新