0

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

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)

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

4

1 回答 1

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

如何分配给 node_id 取决于您。

于 2013-09-05T06:19:24.930 回答