Lynx - 如何在转储网站内容之前延迟下载过程

时间:2013-07-24 15:23:17

标签: bash shell curl chromium lynx

我想使用 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等待网站呈现其内容直到完成?

先谢谢了。

1 个答案:

答案 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)。

至少,我就是这样做的。