スクレイピング中に、リンクが相対パスで記述されていることが、よくあるのですが、そのリンクのパスを絶対パスに変換したい時ってないでしょうか?
私は、結構あります。
そんな時は、下記のようにすると相対パスを絶対パスに変換できます。
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 件のコメント:
コメントを投稿