day*_*r4b 5 linux wget web-crawler
我正在尝试制作一个网站的镜像,但是URL包含几个以正常wget方式复制到磁盘上文件时重叠的路径。该问题通过URL和http://example.com/news和表现出来http://example.com/news/article1。
Wget将这些URL下载为/news和/news/article1,但这意味着该/news文件将被具有相同名称的文件夹覆盖。
适当的静态镜像将要求下载这两个URL而不是/news/index.html和/news/article1。
我试图通过运行wget两次并相应地移动文件来解决此问题,但是这对我来说并不是很好。该/news路径具有/news/article1需要转换的链接。我正在使用该-k选项来转换链接,但是如果我运行wget两次,它不会在这些不相关的下载文件之间转换链接。
这是我的命令:
wget -p -r -l4 -k -d -nH http://example.com
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的工作的一个示例:
# wget once at first level (gets /news path but not /news/*)
wget -p -r -l1 -k -nH http://example.com
# move /news file to temp path
mv news /tmp/news.html
# wget again to get everything else (notice the different level value)
wget -p -r -l4 -k -nH http://example.com
# move temp path back to /news/index.html
mv /tmp/news.html news/index.html
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,/news页面上本应指向的链接/news/article1尚未转换。
有人知道该如何解决wget吗?是否有其他工具更有效?
我想到了!
问题是我假设那/news/index.html是我需要的 URL。仔细阅读手册页后,我发现这-E (--adjust-extension)解决了我的问题。该标志强制wget将扩展名应用.html到它下载的所有 HTML 文件上。
将其与-k转换链接相结合会产生一个 100% 可用的镜像,其中包含所需的所有页面。
以下是下载的文件和路径的示例图:
http://example.com/news --> /news.html
http://example.com/news/article1 --> /news/article1.html
Run Code Online (Sandbox Code Playgroud)
作为一面功能性镜子,这非常棒。默认网络服务器配置(至少对于 Apache)似乎允许http://sitemirror.com/news/article1加载/news/article1.html内容的路径。但是,可能需要重写以防止路径http:/sitemirror.com/news显示 404 或文件夹索引。这应该不难。
哦,这是我的最终wget命令:
wget -p -r -l4 -E -k -nH http://example.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1073 次 |
| 最近记录: |