我正在在线查看有关如何构建搜索引擎的代码(下面的链接)。作为一个新手程序员,我很难解释循环的方式。
红宝石代码:
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/