为了使东西自动化,我需要递归下载一个网页。我正在使用 wget,因为它可能是对程序员最友好的工具,它使用 -r 标志来触发链接跟踪。
wget,hovewer,不处理漂亮的网址,即http://webpage/index.php/my/pretty/link,将它们视为子目录。
这个问题有解决方案吗?(我宁愿不修改该网页的源代码)
干杯,MH
编辑:问题已解决
感谢您富有洞察力的回复!
我已经设法解决了这个问题——不过,通过对提到的网页进行微小的修改。
我所做的很简单:我使用了服务器的 url 重写功能并将 url 从http://webpage/my/pretty/link重定向到http://webpage/index.php/my/pretty/link。然后,使用以下 wget 标志:
wget --mirror --page-requisites --html-extension --convert-links http://webpage/
瞧!这一切都完美无缺(在此过程中仍然创建了目录,但是从这一点开始使用某种脚本来处理它是微不足道的)。
那么,wget 应该如何知道 index.php/my/pretty 实际上不是目录?从 HTTP 客户端的角度来看,这一点都不明显。
也许你可以
wget --exclude-directories
解决这个问题?或者 checkwget -nd
,它将创建一组平面文件(不是目录树)。检查这些。漂亮的 URL 通常不是独立的,它们更频繁地使用一种机制来来回传递数据(通常通过 POST 或 cookie)到后端基于 MVC 框架的应用程序。
如果您使用多个 wget 调用,值得注意的是 wget 使用 cookie,但默认情况下不保存它们......这意味着每个 wget 都将从一个新的 cookie 开始,并且不会有可用的状态信息. --save-cookies(文件名)和 --load-cookies(文件名)选项将帮助您。
如果 Web 应用程序使用 POST 作为机制,我猜您可能必须编写一个针对该站点量身定制的特定爬虫。
也许您可以将 Firefox 与 iMacros 插件一起使用而不是 wget?它具有命令行支持,但不能自动跟踪链接(您需要编写脚本)。
http://wiki.imacros.net/iMacros_for_Firefox#Command_Line_Support
我每天用它下载各种报告。
如果您多次访问同一个站点,那么您可以考虑使用 alias 命令,您可以使用友好名称创建别名以使用完整路径名 wget
显然添加您需要的任何开关,然后您的窥视者可以运行 mywget 来执行该功能
虽然我不确定一旦它点击 & 会发生什么,因为你通常会在它的引号中加上这样的网址
希望有帮助