Как получить все изображения, PDF и другие файлы ссылки с веб-страницы?

Мне нужно разработать приложение Ruby on Rails, которое выбирает все ссылки на файлы изображений, pdf, cgi и т. Д. С веб-страницы.

3 ответа

Самый простой способ получить ссылки со страниц - это использовать URI.extract, Из документов:

Описание

Извлекает URI из строки. Если указан блок, выполняется итерация по всем совпадающим URI. Возвращает nil, если данный блок или массив с совпадениями.

использование

require "uri"

URI.extract("text here http://foo.example.org/bla and here mailto:test@example.com and here also.")
# => ["http://foo.example.com/bla", "mailto:test@example.com"]

Глядя на эту страницу:

require 'open-uri'
require 'uri'

html = open('http://stackru.com/questions/8722693/how-to-get-all-image-pdf-and-other-files-links-from-a-web-page/8724632#8724632').read

puts URI.extract(html).select{ |l| l[/\.(?:gif|png|jpe?g)\b/]}

который возвращает:

http://cdn.sstatic.net/stackru/img/apple-touch-icon.png
http://sstatic.net/stackru/img/apple-touch-icon.png
http://foobar.com/path/to/file.gif?some_query=1
http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif

Пробовали ли вы следующие уроки, чтобы сначала научиться разбирать веб-страницу:

Также, как примечание, будьте осторожны, какие сайты вы анализируете. Кажется, что все эти PDF, изображения и т. Д. Могут быть замечены сайтом, который вы пытаетесь проанализировать. Я узнал на своей шкуре.

Иногда вы можете получить информацию из каналов. Попробуй это:

Разбор подачи

Забудьте Net::HTTP, Open::URI намного проще. Вот некоторый код для начала работы:

require 'nokogiri'
require 'open-uri'

url = 'http://www.google.com/'
doc = Nokogiri::HTML(open(url))
doc.traverse do |el|
    [el[:src], el[:href]].grep(/\.(gif|jpg|png|pdf)$/i).map{|l| URI.join(url, l).to_s}.each do |link|
        File.open(File.basename(link),'wb'){|f| f << open(link,'rb').read}
    end
end
Другие вопросы по тегам