使用Ruby为站点的每个URL创建一个文件

时间:2013-09-05 06:03:45

标签: ruby file web-crawler

我有以下代码,它使用已爬网站点的内容创建一个文件:

require 'rubygems'
require 'anemone'
require 'nokogiri'
require 'open-uri'

Anemone.crawl("http://www.findbrowsenodes.com/", :delay => 3) do |anemone|
  anemone.on_pages_like(/http:\/\/www.findbrowsenodes.com\/us\/.+\/[\d]*/) do | page |

    doc = Nokogiri::HTML(open(page.url))

    node_id = doc.at_css("#n_info #clipnode").text unless doc.at_css("#n_info #clipnode").nil?
    node_name = doc.at_css("#n_info .node_name").text unless doc.at_css("#n_info .node_name").nil?
    node_url = page.url

    open("filename.txt", "a") do |f|
      f.puts "#{node_id}\t#{node_name}\t#{node_url}"
    end
  end
end

现在我想创建一个名为node_id的文件而不是其他文件。我试过这个:

page.each do |p|
  p.open("#{node_id}.txt", "a") do |f|
    f.puts "#{node_id}\t#{node_name}\t#{node_url}"
  end
end

但得到了这个:

undefined method `value' for #<Nokogiri::XML::DTD:0x51c089a name="html"> (NoMethodError)

然后尝试了这个:

page.open("#{node_id}.txt", "a") do |f|
  f.puts "#{node_id}\t#{node_name}\t#{node_url}"
end

但得到了这个:

private method `open' called for #<Anemone::Page:0x91472e8> (NoMethodError)

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

File.open("#{node_id}.txt", "w") do |f|
   f.puts "stuff"
end

如何分配给node_id取决于你。