我在这里基本上有一个简短的ruby脚本(我刚开始学习),它的目的是蜘蛛爬行一个网站并返回它找到的所有链接。
@sites = Array.new
Anemone.crawl("http://www.nemecisco.com/") do |anemone|
anemone.on_every_page do |page|
puts page.url
@sites<<page.url+"" #heres where i add something to give it a line break i think
end
anemone.after_crawl { puts @sites }
end
end
它做得很好,但是当它被输出到HTML时,它们都聚集在一起,因为它试图将它们卡在一行上。 HTML只是ruby脚本标记内的数组。
<%= @sites %>
您可能会注意到该数组由页面名称+其他内容组成。我认为一个break标记就足够了,但Ruby不喜欢这个并且提供了一个糟糕的URI异常。
有没有人知道如何在每个网站声明后放置换行符。在HTML声明中?在阵列?任何和所有帮助表示赞赏。
答案 0 :(得分:2)
由于您正在尝试输出数组,因此它使用换行符\n
而不是HTML中断来加入它们。您可以通过加入br
代码来强制执行HTML中断:
<%= @sites.join("<br />") %>
在Rails 3中,您可能需要关闭转义:
<%= raw(@sites.join("<br />")) %>
答案 1 :(得分:0)
我不熟悉Amemone,但我假设page.url
返回URI
类的实例。您需要在追加它之前将网址转换为字符串(page.url.to_s
)。
我可能会将URL保留为URI实例,并在打印时格式化它们。将您的after_crawl
方法更改为{ puts @sites.join("\n") }
(URI
个实例将自动转换为字符串。
答案 2 :(得分:0)
最安全的做法可能是在ERB中手动完成:
<% @sites.each do |site| %>
<%= site %><br>
<% end %>
或者在Rails 2中:
<% @sites.each do |site| %>
<%=h site %><br>
<% end %>
这样您就不必担心@sites
条目可能会出现HTML问题。