linux - 使用 wget 镜像具有相同名称的路径和子文件夹的网站

标签 linux web-crawler wget

我正在尝试制作一个网站的镜像,但 URL 包含几个路径,当以正常的 wget 方式复制到磁盘上的文件时,这些路径会重叠。问题表现为 http://example.com/newshttp://example.com/news/article1 等 URL。

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

这是我尝试过的解决方法的示例:

# 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

在上面的例子中,/news页面上本应指向/news/article1的链接没有被转换。

有人知道如何使用 wget 解决这个问题吗?是否有其他工具可以更好地工作?

最佳答案

我想通了!

问题是我假设 /news/index.html 是我需要的 URL。仔细阅读手册页后,我发现 -E (--adjust-extension) 解决了我的问题。此标志强制 wget.html 扩展应用于它下载的所有 HTML 文件。

将其与 -k 相结合以转换链接会产生一个 100% 可用的镜像,其中包含所有需要的页面。

这是下载文件和路径的示例 map :

http://example.com/news           -->  /news.html
http://example.com/news/article1  -->  /news/article1.html

作为功能性镜子,这很棒。默认网络服务器配置(至少对于 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

关于linux - 使用 wget 镜像具有相同名称的路径和子文件夹的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712813/

相关文章:

linux - 如何在没有 'whoami'的情况下知道Linux中当前的用户

c++ - 可以从用户空间找到 mmap 页面的脏污度吗?

php - 从 PHP 脚本将数据传递给 Python Web 爬虫

node.js\为什么我会收到 RangeError : Maximum call stack size exceeded

Linux cronjob wget 到文件而不是 STDOUT

windows - 什么是 wget 以及如何从公共(public)目录获取图像?

linux - 将 KVM XML 导入 Qemu

c++ - rdtsc 计时器在 linux 中不准确吗?

python - 网页中的名称不会被抓取

bash - 成功的 yum 更新是否有任何原因导致后续 wget 失败?