2012-01-06 51 views
0

我工作的一个应用程序,我必须如何在使用nokogiri/hpricot和其他gem的网页中grep文件名和扩展名?

1)获取网站

2)的所有链接,然后获得在网页中的每个 所有文件和文件扩展名列表/链接。

我与它的第一部分做了:) 我得到下面的代码网站的所有链接..

require 'rubygems' 
require 'spidr' 
require 'uri' 


Spidr.site('http://testasp.vulnweb.com/') do |spider| 
    spider.every_url { |url| 
        puts url  
        } 
end 

现在我已经得到了所有的文件/在每个文件的扩展在 页面的,所以我尝试下面的代码

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 
require 'spidr' 

site = 'http://testasp.vulnweb.com' 

in1=[] 

Spidr.site(site) do |spider| 

    spider.every_url { |url| in1.push url } 

end 


in1.each do |input1| 

    input1 = input1.to_s 
    #puts input1 
    begin 
    doc = Nokogiri::HTML(open(input1)) 
    doc.traverse do |el| 
     [el[:src], el[:href]].grep(/\.(txt|css|gif|jpg|png|pdf)$/i).map{|l| URI.join(input1, l).to_s}.each do |link| 
      puts link 
     end 
    end 
    rescue => e 
     puts "errrooooooooor" 
    end 

end 

,但任何人都可以指导我如何解析链接/网页并获取页面的文件 - 扩展?

+0

发布你想要实现的例子将是有用的:) – 2012-01-06 06:38:05

回答

1

您可能想看看URI#parse。 URI模块是Ruby标准库的一部分,并且是gem的依赖项。使用规范进行示例实现以获得较好的度量

require 'rspec' 
require 'uri' 

class ExtensionExtractor 
    def extract(uri) 
    /\A.*\/(?<file>.*\.(?<extension>txt|css|gif|jpg|png|pdf))\z/i =~ URI.parse(uri).path 
    {:path => uri, :file => file, :extension => extension} 
    end 
end 

describe ExtensionExtractor do 
    before(:all) do 
    @css_uri = "http://testasp.vulnweb.com/styles.css" 
    @gif_uri = "http://testasp.vulnweb.com/Images/logo.gif" 
    @gif_uri_with_param = "http://testasp.vulnweb.com/Images/logo.gif?size=350x350" 
    end 

    describe "Common Extensions" do 
    it "should extract CSS files from URIs" do 
     file = subject.extract(@css_uri) 
     file[:path].should eq @css_uri 
     file[:file].should eq "styles.css" 
     file[:extension].should eq "css" 
    end 

    it "should extract GIF files from URIs" do 
     file = subject.extract(@gif_uri) 
     file[:path].should eq @gif_uri 
     file[:file].should eq "logo.gif" 
     file[:extension].should eq "gif" 
    end 

    it "should properly extract extensions even when URIs have parameters" do 
     file = subject.extract(@gif_uri_with_param) 
     file[:path].should eq @gif_uri_with_param 
     file[:file].should eq "logo.gif" 
     file[:extension].should eq "gif" 
    end 
    end 
end 
相关问题