Как получить имя файла и расширения на веб-странице, используя nokogiri / hpricot и другие драгоценные камни? - PullRequest
0 голосов
/ 06 января 2012

Я работаю над приложением, в котором мне нужно

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

но кто-нибудь может подсказать мне, как разобрать ссылки / веб-страницу и получить файл? Расширения на странице?

1 Ответ

1 голос
/ 06 января 2012

Возможно, вы захотите взглянуть на URI#parse.Модуль URI является частью стандартной библиотеки Ruby и является зависимостью от гема spidr.Пример реализации со спецификацией для хорошей меры.

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
...