08/06/22 16:46:58
uri が前のままだった
本質的には puts doc.search('a').map{|e| e['href']} だけでいい
でも、それだと相対 URL で書かれているリンクがわけわからなくなるのでわざわざ uri に join してる
http:// と https:// 以外を取得しても意味がないことが多いからわざわざ http:// と https:// 以外を除いてる
で、Youtube では「onclick で JavaScript 起動しかさせないリンク」という href 自体がない <a> タグがあるのでわざわざ href が nil な場合を compact で除いてる
他のサイトでは「欲しいリンクだと思ったら実は画像貼り付けのボタンでPOST」とかにも対処しなければならないかもしれない
require 'rubygems'
require 'hpricot'
require 'open-uri'
uri = URI.parse('URLリンク(jp.youtube.com)')
doc = Hpricot.parse(uri.read)
puts doc.search('a').map{|e| e['href']}.compact.map{|e| uri + e}.find_all{|e| e.scheme =~ /\Ahttp/}.uniq