0

我想访问文本文件中列出的每个 URL。

我有:

require 'mechanize'

File.open('sources.txt').each_line { |url|
  agent = Mechanize.new
  puts "Visiting #{url}"
  mypage = agent.get("#{url}")
  current_url = mypage.uri.to_s
  puts "The final URL is #{current_url}"
}

此代码通过 中的 URL 运行sources.txt,告诉您它正在这样做,然后在到达页面后告诉您 URL。即如果www.foo.com在 中source.txt,但www.foo.com解析为foo.com(没有 WWW),它会告诉你。

如何将每个已解析/最终/当前 URL 保存到单个行分隔的文本文件中?

4

2 回答 2

1

知道了。

require 'mechanize'
agent = Mechanize.new

File.open('sources.txt').each_line do |url|
  puts "Visiting #{url}"
  mypage = agent.get("#{url}")
  @current_url = mypage.uri.to_s
  puts "The final URL is #{@current_url}"
File.open('output.txt', 'a') do |output| 
output.puts @current_url
end
 end

对格式感到抱歉,我仍然对在哪里放置缩进感到尴尬。

于 2012-05-01T15:21:14.260 回答
1

如果要附加到文件,请使用“a”标志而不是“w”。标志在这里http://www.ruby-doc.org/core-1.9.3/IO.html

50.times do |n|
  File.open 'destinations.txt', 'a' do |file|
    file.write "line #{n}\n"
  end
end

更新(对您的代码进行一些重构):

require 'mechanize'
agent = Mechanize.new

output = File.open 'output.txt', 'a'
File.open('sources.txt').each_line do |url|
  puts "Visiting #{url}"
  mypage = agent.get("#{url}")
  @current_url = mypage.uri.to_s
  puts "The final URL is #{@current_url}"
  output.puts @current_url
end
output.close

这样,您将打开每个文件一次。

于 2012-05-01T06:46:04.603 回答