wget 和漂亮的 URL

wget 和漂亮的 URL

为了实现自动化,我需要递归下载网页。我使用 wget,因为它可能是目前对程序员最友好的工具,使用 -r 标志来触发链接跟踪。

然而,wget 不能处理漂亮的 URL,例如http://webpage/index.php/my/pretty/link,将它们视为子目录。

这个问题有解决办法吗?(我不想修改该网页的源代码)

干杯,MH

编辑:问题解决

感谢您的深刻答复!

我已经设法解决了这个问题——不过,通过对提到的网页做一些小的修改。

我所做的很简单:我使用了服务器的 URL 重写功能,并将 URL 从http://网页/my/pretty/linkhttp://webpage/index.php/my/pretty/link。然后,使用以下 wget 标志:

wget --mirror --page-requisites --html-extension --convert-links http://webpage/

瞧!一切都完美无缺(尽管如此,在此过程中仍会创建目录,但从这一点开始使用某种脚本来处理它就很简单了)。

答案1

那么,wget 应该如何知道 index.php/my/pretty 是否真的不是目录?从 HTTP 客户端的角度来看,这一点并不明显。

也许你可以wget --exclude-directories解决这个问题?或者也许可以检查一下wget -nd,它将创建一组平面文件(而不是目录树)。看看这些。

答案2

漂亮的 URL 通常不是自力更生的,它们更频繁地使用机制来回传递数据(通常通过 POST 或 cookie)到后端基于 MVC 框架的应用程序。

如果您使用多个 wget 调用,则值得注意的是 wget 使用 cookie,但默认情况下不会保存它们......这意味着每个 wget 都将从一个新的 cookie 开始,并且不会有可用的状态信息。--save-cookies(文件名)和 --load-cookies(文件名)选项将为您提供帮助。

如果 Web 应用程序使用 POST 作为机制,我猜您可能必须编写一个专门针对该网站的特定爬虫程序。

答案3

也许你可以使用带有 iMacros 插件的 Firefox 来代替 wget?它有命令行支持,但不能自动跟踪链接(你需要编写脚本)。

http://wiki.imacros.net/iMacros_for_Firefox#Command_Line_Support

我每天用它来下载各种报告。

答案4

如果你多次访问同一个网站,那么你可以考虑使用别名命令,你可以为 wget 创建一个带有完整路径名的友好别名

alias mywget='wget http://domain.com/file/?search&channel=24'

显然,添加你需要的任何开关,然后你的用户就可以运行 mywget 来执行该功能

虽然我不确定一旦它碰到&会发生什么,因为你通常会将这样的网址放在引号中

希望有帮助

相关内容