2015-05-30 38 views
-1

我嘗試製作一個WebCrawler,它可以從主頁中找到鏈接並一次又一次訪問找到的鏈接。 現在我已經編寫了一個解析器的代碼,它向我顯示了找到的鏈接並打印了此主頁上某些標記的統計信息但我不知道如何訪問循環中的新鏈接並打印統計信息。Ruby - WebCrawler如何訪問找到的鏈接的鏈接?

所有的*

@visit = {} 
@src = Net::HTTP.start(@url.host, @url.port) do |http| 
       http.get(@url.path) 
@content = @src.body 

*

def govisit 
     if @content =~ @commentTag 
     end 

     cnt = @content.scan(@aTag) 
     cnt.each do |link| 
      @visit[link] = [] 
     end 

     puts "Links on this site: " 
     @visit.each do |links| 
      puts links 
     end 

     if @visit.size >= 500 
      exit 0 
     end 

     printStatistics 
    end 

回答

0

首先,你需要接受一個鏈接,並返回身體輸出的功能。然後解析出所有鏈接,並保留一個鏈接列表。如果您尚未訪問該鏈接,請檢查該列表。從新鏈接列表中刪除訪問過的鏈接,然後再次調用相同的功能,並全部完成。

要在某個點停止爬網程序,您需要在while循環中創建條件。

根據您的代碼:

@visited_links = [] 
@new_links = [] 

def get_body(link) 
    @visited_links << link 
    @src = Net::HTTP.start(@url.host, @url.port) { |http| http.get(@url.path) } 
    @src.body 
end 

def get_links(body) 
    # parse the links from your body 
    # check if the content does not have the same link 
end 

start_link_body = get_body("http://www.test.com") 

get_links(start_link_body) 

while @visited_links < 500 do 
    body = get_body(@new_links.shift) 
    get_links(body) 
end