我想使用 lynx
保存此特定网站的全部内容我使用了这些命令
webpage="http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=%2Ftrunk%2Fsrc&range=41818%3A40345&mode=html"
lynx -crawl -dump $webpage > output
我的输出只是这样:
SVN path: ____________________ SVN revision range: ____________________
预计会有关于错误和评论的所有信息。
在URL中,它包含“/ trunk / src”和“41818:40345”值,这些值应放入 SVN路径和 SVN修订版范围然后提交它以获取内容,但事实并非如此。
问题:您是否有任何想法“告诉”lynx等待网站呈现其内容直到完成?
先谢谢了。
答案 0 :(得分:2)
这里的问题是网页是由javascript函数构建的。使用像lynx(或curl这样的工具)下载这样的页面可能很棘手,恕我直言的基本下载问题更好。为了下载您在该页面上看到的内容,您需要先加载页面所需的javascript文件,然后执行javascript“就像您是浏览器一样”。该javascript将继续请求一些数据,结果是XML,然后从该数据构建HTML。
请注意,“网站”不会呈现其数据。您的浏览器呈现数据。或者,为了更准确,您的浏览器应该呈现它,但lynx不会,因为它不会执行javascript。
所以你有几个选择。您可以尝试找到一个可编写脚本的javascript感知浏览器(iirc links
执行javascript,但我不知道如何编写脚本来执行您想要的操作。)
或者你可以作弊。通过使用Chrom {e,ium}的“开发人员”工具,您可以看到javascript正在请求的URL。事实证明,在这种情况下,
http://build.chromium.org/cgi-bin/svn-log?url=http://src.chromium.org/svn//trunk/src&range=41818:40345
所以你可以使用curl
获得它,如下所示
curl -G \
-d url=http://src.chromium.org/svn//trunk/src \
-d range=41818:40345 \
http://build.chromium.org/cgi-bin/svn-log \
> 41818-40345.xml
XML数据采用非常简单(即显然易于反向工程)的格式。然后你可以使用一个简单的脚本化xml工具,如xmlstarlet
(或任何XSLT工具)来分离xml,并根据需要重新格式化。幸运的话,你甚至可以在xml的某个地方找到一些文档(或DTD)。
至少,我就是这样做的。