Ruby - WebCrawler如何访问找到链接的链接?

时间:2015-05-30 11:01:43

标签: ruby url hyperlink web-crawler net-http

我尝试创建一个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

1 个答案:

答案 0 :(得分: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