使用curlmirror.pl可以提供不同的输出

时间:2013-05-14 09:27:54

标签: perl curl

使用http://curl.haxx.se/programs/curlmirror.txt [修改:当前版本https://github.com/cudeso/tools/blob/master/curlmirror.txt],我正在寻找下载网站并检查新下载的网站与我之间的更改之前已下载过。然而,当我下载相同的网站时,网站上的链接有时使用相对路径,有时它们使用绝对路径,即使网站没有改变,也算作“改变”。

Usage: curlmirror.pl -l -d 3 -o someOutputFileDirectory/url http://url

Output 1: <td><a href="testing.htm">LINK</a></td>
Output 2: <td><a href="http://example.com/testing.htm">LINK</a></td>

有没有办法将所有相对路径转换为绝对路径或反过来?我只需要标准化下载,以便这些链接不会显示为“更改”

1 个答案:

答案 0 :(得分:1)

<强>已更新

我假设网址被放置到$url变量。然后你可以尝试类似下面的东西:

perl -pe 'BEGIN {$url="http://somedomain.org"}
s!(\b(?:url|href)=")([^/]+)(")!$1$url/$2$3!gi' << XXX
<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
XXX

输出:

<td><a href="http://mymain.org/testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="http://mymain.org/home">

如果href="..."不包含url="..."字符,它会替换所有href="$url/..."url="$url/..."(不区分大小写)的模式.../

如果输入是文件,您可以直接在文件中替换这些模式:

cat >tfile << XXX
<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
XXX

cat tfile
perl -i -pe 'BEGIN {$url="http://mymain.org"}
s!(\b(?:url|href)=")([^/]+)(")!$1$url/$2$3!gi' tfile
echo "---"
cat tfile

输出:

<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
---
<td><a href="http://mymain.org/testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="http://mymain.org/home">