寻找图书馆连接相对/完整的网址。

时间:2012-01-12 09:51:51

标签: bash url unix erlang web-scraping

我正在编写一个刮刀程序。我收集页面上的所有链接。它们可能是相对的路径。例如:

foo.html
/foo.html
../foo.html
../../foo.html

我可以将它们连接到它们所在的页面(基本路径)的URL,但这并不是完全简单的。例如:

http://www.example.com/foo + /bar.html = http://www.example.com/bar.html
http://www.example.com/bla/?foo=bar + ../foo.html = http://www.example.com/foo.html

我想知道是否有Erlang Lib,C Lib或CLI程序可以为我找出合适的连接?

2 个答案:

答案 0 :(得分:2)

就CLI而言,wget具有--base开关:

  -B URL
  --base=URL
     

使用URL作为参考点解析相对链接,从通过-i / - input-file选项指定的HTML文件中读取链接(与--force-html一起使用,或者在远程获取输入文件时)从服务器描述它为HTML)。这相当于HTML输入文件中存在“BASE”标记,URL为“href”属性的值。

     

例如,如果您为网址指定http://foo/bar/a.html,而Wget从输入文件中读取../baz/b.html,则会将其解析为http://foo/baz/b.html

因此,如果你执行它将文件输出到stdout并用你的erlang脚本读取它,那应该可以。

答案 1 :(得分:2)

您可以使用ex_uri:resolve/2