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

How to pass from relative links to absolute links in 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 是字符串(用户定义)

使用 URI:

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

首先获取文档:

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

其中foo是你想要的内容。

搜索 link 没有方案且没有以“/”开头。所以他们是相对的。使用此 link 附加 '/' + 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
%>