我正在开发一个我需要的应用程序
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 :(得分:1)
您可能需要查看URI#parse
。 URI模块是Ruby标准库的一部分,是spidr
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