【发布时间】:2013-03-22 03:18:17
【问题描述】:
我正在在线查看有关如何构建搜索引擎的代码(下面的链接)。作为一个新手程序员,我很难理解循环的方式。
Ruby 代码:
def crawl_web(urls, depth=2, page_limit = 100)
depth.times do
next_urls = []
urls.each do |url|
url_object = open_url(url)
next if url_object == nil # [1]
url = update_url_if_redirected(url, url_object)
parsed_url = parse_url(url_object)
next if parsed_url == nil
@already_visited[url]=true if @already_visited[url] == nil # [2]
return if @already_visited.size == page_limit # [3]
next_urls += (find_urls_on_page(parsed_url, url)-@already_visited.keys)
next_urls.uniq!
end
urls = next_urls
end
end
问题:
- 如果 url_object 为 nil,程序是否退出块并返回到 'urls.each' 行的开头?
- 此代码是否显示:“如果我们正在查看的 url 已被访问,或者如果已访问的 URL 为 nil?”
- 这个问题取决于我的第二个问题。如果问题 #2 中的其中一个陈述为真...只有当网站大小与 page_limit 相同时,我们才应返回唯一的 next_urls。
任何建议都有帮助!感谢您到目前为止的阅读!
链接: http://www.skorks.com/2009/07/how-to-write-a-web-crawler-in-ruby/
【问题讨论】: