我想搜索网站的每一页。我的想法是在一个页面上找到所有留在域内的链接,访问它们,然后重复。我也必须采取措施不重复努力。
所以它很容易开始:
page = 'http://example.com'
nf = Nokogiri::HTML(open(page))
links = nf.xpath '//a' #find all links on current page
main_links = links.map{|l| l['href'] if l['href'] =~ /^\//}.compact.uniq
“main_links”现在是来自活动页面的以“/”开头的链接数组(应该是当前域上的链接)。
从这里我可以将这些链接提供并阅读到上面类似的代码中,但我不知道确保我不会重复自己的最佳方法。我想我在访问它们时开始收集所有访问过的链接:
main_links.each do |ml|
visited_links = [] #new array of what is visted
np = Nokogiri::HTML(open(page + ml)) #load the first main_link
visted_links.push(ml) #push the page we're on
np_links = np.xpath('//a').map{|l| l['href'] if l['href'] =~ /^\//}.compact.uniq #grab all links on this page pointing to the current domain
main_links.push(np_links).compact.uniq #remove duplicates after pushing?
end
我仍在努力解决最后一点……但这似乎是正确的方法吗?
谢谢。