我的代码:
allfiles = [123, 234, 345]
allurls = ["http://www.123.com", "http://www.234.com"]
for allfile in allfiles
name = allfile + ".html"
File.open(name, "w") do |file|
for allurl in allurls
file.write(RestClient.get(allurl))
end
end
end
错误:字符串无法强制进入Fixnum(TypeError)
基本上,我想下载相应网址的HTML,并将其保存到以其网址命名的相应文件中。我的代码怎么了?
谢谢!
答案 0 :(得分:0)
错误出现在
行name = allfile +" .html"
Hera allfile是一个整数,您正在尝试将其添加到字符串中。你需要转换' allfile'使用 to_s 方法将字符串转换为字符串。
allfiles = [123, 234, 345]
allurls = ["http://www.123.com", "http://www.234.com"]
for allfile in allfiles
name = allfile.to_s + ".html"
File.open(name, "w") do |file|
for allurl in allurls
file.write(RestClient.get(allurl))
end
end
end
答案 1 :(得分:0)
首先,文件名前缀必须是字符串,因此要么将allfiles
更改为['123', '234', '345']
,要么稍后在表达式中使用String#to_s
进行转换:
name = allfile.to_s + ".html"
其次,使用for
迭代集合在Ruby中是单一的。而是使用Enumerable
方法和块样式:
allfiles.each do |allfile|
File.open("#{allfile}.html") do |file|
allurls.each {|allurl| file.write RestClient.get(allurl)}
end
end
OP的评论更新:
domains = ['123', '234', '345']
domains.each do |domain|
File.open("#{domain}.html") do |file|
file.write RestClient.get("http://www.#{domain}.com/")
end
end
仅适用于www。< domain> .com格式的网址。它需要修改才能更通用。
答案 2 :(得分:0)
错误:字符串无法强制进入Fixnum(TypeError)
错误是由此行name = allfile + ".html"
引起的。您无法将 字符串 添加到 数字 。如下更改它将解决您的问题
allfiles = [123, 234, 345]
allurls = ["http://www.123.com", "http://www.234.com"]
for allfile in allfiles
name = (allfile).to_s + ".html"
File.open(name, "w") do |file|
for allurl in allurls
file.write(RestClient.get(allurl))
end
end
end
您也可以使用string interpolation。
allfiles = [123, 234, 345]
allurls = ["http://www.123.com", "http://www.234.com"]
for allfile in allfiles
name = "#{allfile}" + ".html"
File.open(name, "w") do |file|
for allurl in allurls
file.write(RestClient.get(allurl))
end
end
end