如何从相对链接传递到nokogiri中的绝对链接

时间:2018-03-20 19:15:19

标签: ruby uri nokogiri

如何从相对链接传递到绝对链接:

<a href="/foo/ba.pdf">A</a>
<a href="foo/ba.pdf">B</a>
<a href="http://google.com/foo/ba.pdf">A</a>
<a href="#hello">A</a>

应转换为

<a href="PREFIX/foo/ba.pdf">A</a>
<a href="PREFIX/foo/ba.pdf">B</a>
<a href="http://google.com/foo/ba.pdf">A</a>
<a href="#hello">A</a>

其中PREFIX是字符串(用户定义)

2 个答案:

答案 0 :(得分:0)

使用URI:

require 'uri'
URI.join('http://google.com/', 'foo')
#<URI::HTTP http://google.com/foo>

答案 1 :(得分:0)

首先得到文件:

<% doc = Nokogiri::HTML(foo)%>

其中foo是你想要的内容。

搜索没有方案且没有以'/'开头的链接。所以他们是相对的。使用此链接附加'/'+ PREPEND

<% for link in doc.search('a[href]').select { |l| URI(l['href']).scheme == nil and URI(l['href']).path.start_with?('/') == false }
     link['href'] = '/' + PREPEND + '/' + link['href']
   end
%>