【问题标题】:Trying to mirror site that uses strapdown.js尝试镜像使用strapdown.js 的站点
【发布时间】:2014-11-26 12:56:55
【问题描述】:

有一个使用strapdown.js 的网站,我尝试使用httrack 或wget 进行镜像,但我做不到,因为该网站包含markdown 而不是HTML。只有捷联将链接转换为 html 链接。因此客户端需要先解释 Javascript,然后在生成的 dom 中搜索链接。

市场上是否有能够做到这一点的工具?

我试过了

wget -erobots=off --no-parent --wait=3 --limit-rate=20K -r -p -U "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" -A htm,html,css,js,json,gif,jpeg,jpg,bmp http://my.si.te

httrack -w -v --extended-parsing=N -n -t -r -p -U "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" --robots=0 http://my.si.te "+*" "-r6"

非常感谢任何帮助。

【问题讨论】:

  • 你可以试试CasperJS(基于phantomJS),IIRR它可以解释javascript。

标签: javascript linux unix wget httrack


【解决方案1】:

如果你习惯用 Java 编写你的客户端,我使用了HTMLUnit

使用 Javascript 获取页面的精简示例如下所示。它改编自我用来抓取我管理的网站之一的实际脚本。我以strapdownjs.com 为例。如果您运行它,您将不得不忽略 css 警告,但您会注意到它会找到并输出指向 bootswatch.com 的链接,该链接由页面源中的 markdown 中的 javascript 生成。你可能更喜欢the tool's own Getting started page

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.List;

import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.*;

public class WebGetter
{

    // Set up the client (i.e. gui-less browser)
    public static void main(String[] args) throws FailingHttpStatusCodeException,  MalformedURLException, IOException
    {
        final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
        webClient.setThrowExceptionOnScriptError(false);
        webClient.setJavaScriptEnabled(true);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.setJavaScriptTimeout(20000);
        webClient.waitForBackgroundJavaScript(20000);

        // Get the page you want (store as HTMLUnit object HtmlPage)
        String url = "http://strapdownjs.com/";
        HtmlPage page = webClient.getPage(url);

        // Use some of the HTMLUnit functionality to look at the DOM (e.g. here,
        // find all links)
        List<HtmlAnchor> allLinks = page.getAnchors();
        for (HtmlAnchor a : allLinks)
        {
            System.out.println(a.asText());
        }
    }
}

【讨论】:

  • 你能描述得更详细一点吗?
  • 你知道吗 - 我刚刚意识到我推荐了错误的包 - HTMLUnit 可以满足你的需求。我将两者结合使用。我将完全编辑帖子并在其中添加示例。对不起。
  • 只是为了澄清奇怪的编辑历史。我最初错误地推荐了JUnit而不是HTMLUnit(我把这两个工具一起使用,不小心引用了错误的那个)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多