2014年12月25日木曜日

Rubyで相対パスを絶対パスに変換する方法

スクレイピング中に、リンクが相対パスで記述されていることが、よくあるのですが、そのリンクのパスを絶対パスに変換したい時ってないでしょうか?

私は、結構あります。

そんな時は、下記のようにすると相対パスを絶対パスに変換できます。

require 'uri'
require 'open-uri'
require 'nokogiri'

url = 'http://www.sample.com'

charset = nil
html = open(url) do |f|
  charset = f.charset
  f.read 
end

doc = Nokogiri::HTML.parse(html, nil, charset)
pdf_list = []
doc.xpath('//a').each do |node|
  next if node.attribute('href').blank?
  p href = node.attribute('href').value

  href.match(/.*\.pdf$/) do |md|
     pdf_url = md[0]
     pdf_url = URI.join(url, pdf_url).to_s # 相対パス => 絶対パス
     pdf_list << pdf_url
  end
end

http://www.sample.comのページから、pdfのリンク先の一覧を取得するようなものを想定しており、pdf_listに pdfのurlの一覧が格納されます。

0 件のコメント:

コメントを投稿

statistics