我已经编写了这段代码,它输出了一份jobdescriptions列表(丹麦文)。它工作正常,但我想稍微改变输出。该函数是递归的,因为作业是嵌套的,但输出不显示嵌套。
如何配置函数以显示如下输出:
工作1
- 工作1.1
- 工作1.2
- 工作1.2.1
等等......
require 'nokogiri'
require 'open-uri'
def crawl(url)
basePath = 'http://www.ug.dk'
doc = Nokogiri::HTML(open(basePath + url))
doc.css('.maplist li').each do |listitem|
listitem.css('.txt').each do |txt|
puts txt.content
end
listitem.css('a[href]').each do |link|
crawl(link['href'])
end
end
end
crawl('/Job.aspx')
答案 0 :(得分:1)
require 'nokogiri'
require 'open-uri'
def crawl(url, nesting_level = 0)
basePath = 'http://www.ug.dk'
doc = Nokogiri::HTML(open(basePath + url))
doc.css('.maplist li').each do |listitem|
listitem.css('.txt').each do |txt|
puts " " * nesting_level + txt.content
end
listitem.css('a[href]').each do |link|
crawl(link['href'], nesting_level + 1)
end
end
end
crawl('/Job.aspx')
答案 1 :(得分:1)
我看到两个选项:
将另一个参数传递给递归函数以指示您当前所在的级别。将该值初始化为0,每次调用该函数时都会递增此值。像这样:
def crawl(url, level)
basePath = 'http://www.ug.dk'
doc = Nokogiri::HTML(open(basePath + url))
doc.css('.maplist li').each do |listitem|
listitem.css('.txt').each do |txt|
puts txt.content
end
listitem.css('a[href]').each do |link|
crawl(link['href'], level + 1)
end
end
end
使用保存callstack的caller
数组。使用此数组的大小来指示您所在的递归级别。
def try
puts caller.inspect
end
try
我个人会坚持使用第一版,因为它似乎更容易阅读,但需要您修改界面。