2

我想使用lynx保存这个特定网站的全部内容

http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=%2Ftrunk%2Fsrc&range=41818%3A40345&mode=html

我使用了这些命令

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 在网站呈现其内容之前稍等片刻,直到完成?

提前致谢。

4

1 回答 1

3

这里的问题是网页是由 javascript 函数构建的。使用 lynx (或 curl,恕我直言,它更擅长基本下载问题)之类的工具下载此类页面可能会很棘手。为了下载您在该页面上看到的内容,您需要首先加载页面所需的 javascript 文件,然后“就像您是浏览器一样”执行 javascript。该 javascript 将继续请求一些数据,结果是 XML,然后从该数据构建 HTML。

请注意,“网站”不会呈现其数据。您的浏览器呈现数据。或者,更准确地说,您的浏览器应该会呈现它,但 lynx 不会,因为它不执行 javascript。

所以你有几个选择。您可以尝试找到一个可编写脚本的支持 javascript 的浏览器(iirclinks执行 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)。

至少,我会这样做。

于 2013-07-24T19:44:45.200 回答