Я использовал Perl годами и мне нравился LWP.Это был отличный инструмент.Тем не менее, вот как я могу извлечь URL-адреса со страницы.Это не паукообразный сайт, но это было бы просто:
require 'open-uri'
require 'uri'
urls = URI.extract(open('http://example.com').read)
puts urls
Получив результат в виде:
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
http://www.w3.org/1999/xhtml
http://www.icann.org/
mailto:iana@iana.org?subject=General%20website%20feedback
Запись в качестве метода:
require 'open-uri'
require 'uri'
def get_gallery_urls(url)
URI.extract(open(url).read)
end
или, ближе к исходной функции, выполняя ее Ruby-way:
def get_gallery_urls(url)
URI.extract(open(url).read).map{ |u|
URI.parse(u).host ? u : URI.join(url, u).to_s
}
end
или, следуя ближе к исходному коду:
require 'nokogiri'
require 'open-uri'
require 'uri'
def get_gallery_urls(url)
Nokogiri::HTML(
open(url)
)
.at('#thumbnails')
.search('a')
.map{ |link|
href = link['href']
URI.parse(link[href]).host \
? href \
: URI.join(url, href).to_s
}
end
Oneиз того, что привлекло меня в Ruby, это его способность быть читаемым, но в то же время быть кратким.
Если вы хотите использовать свои собственные функции на основе TCP / IP, стандартная сетевая библиотека Ruby является отправной точкой.По умолчанию вы получаете:
net/ftp
net/http
net/imap
net/pop
net/smtp
net/telnet
с ssh, scp, sftp на основе SSL и другими, доступными в виде гемов.Используйте gem search net -r | grep ^net-
, чтобы увидеть короткий список.