0

有一个使用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"

非常感谢任何帮助。

4

1 回答 1

0

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

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

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());
        }
    }
}
于 2014-11-27T10:17:58.653 回答