【问题标题】:Ruby - WebCrawler how to visit the links of the found links?Ruby - WebCrawler 如何访问找到的链接的链接?
【发布时间】:2015-08-13 05:59:41
【问题描述】:

我尝试制作一个 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

【问题讨论】:

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


    【解决方案1】:

    首先,您需要一个接受链接并返回正文输出的函数。然后解析出正文中的所有链接并保留链接列表。如果您尚未访问该链接,请检查该列表。从新链接列表中删除那些访问过的链接,然后再次调用相同的函数并重新执行。

    要在某个点停止爬虫,您需要在条件中构建 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
    

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 2020-10-26
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多