0

httrackまたはwgetを使用してミラーリングしようとしているstrapdown.jsを使用するサイトがありますが、サイトにはHTMLではなくマークダウンが含まれているため、不足しています。リンクを html リンクに変換するのは strapdown だけです。したがって、クライアントは最初に 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 を使用してページを取得するための簡略化された例は、次のようになります。これは、私が管理しているサイトの 1 つをスクレイピングするために使用する実際のスクリプトを基にしています。例として strapdownjs.com を使用しました。実行する場合は css 警告を無視する必要がありますが、ページ ソースのマークダウンから javascript によって生成された、bootswatch.com へのリンクが検出されて出力されることに気付くでしょう。ツール独自の「はじめに」ページを好むかもしれません。

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 に答える