0

認証が必要な Web ページをクロールしようとしています。ログインすると、JSoup http://jsoup.org/ライブラリを使用して HTML ページを解析し、ブラウザでそのページにアクセスできます。

public static void main(String[] args) throws IOException {

    // need http protocol
    Document doc = Jsoup.connect("http://www.secinfo.com/$/SEC/Filing.asp?T=r643.91Dx_2nx").get();

    // get page title

    String title = doc.title();
    System.out.println("title : " + title);

    // get all links
    Elements links = doc.select("a");
    for (Element link : links) {                   
        // get the value from href attribute
        System.out.println("\nlink : " + link.attr("href"));                   
    }
            System.out.println();

  }

出力:

title : SEC Info - Sign In

これは、私が渡している実際の URL ではなく、サインイン ページのコンテンツを取得しています。私は secinfo.com に登録しており、このプログラムを実行している間、デフォルトのブラウザー Firefox からログインしています。

4

3 に答える 3

0

デフォルトのブラウザを使用してログインしている場合でも、これは役に立ちません。Java プログラムは別のプロセスであり、ブラウザと画面を共有しません。

一方、secinfo には認証が必要であり、JSoup では認証の詳細を渡すことができます。

認証の詳細を渡すとうまくいきます:

この回答を確認してください(基本アクセス認証によるJsoup接続

于 2013-09-21T06:30:13.237 に答える
0

post コマンドでサインインし、返された Cookie を保存する必要があります。そこにセッション情報が保存されます。ここに例を書きました: Jsoup can't Login on Page。この例の Web サイトは、ログイン ページに既にセッション Cookie を設定する例外です。それがあなたのために働くならば、あなたはそのステップを離れることができます.

正確な post コマンドは、Web サイトによって異なる場合があります。HTML から掘り出すか、プラグインをブラウザにインストールして post コマンドをインターセプトする必要があります。

于 2013-10-15T08:20:22.353 に答える
0

ターゲット サイトのログイン メカニズムがリクエストで動作する場合、 Jsoupは with メソッド チェーンconnect()もサポートします。post()POST

Document doc = Jsoup.connect("url")
  .data("aUserName", "myUserName")
  .data("aPassword", "myPassword")
  .userAgent("Mozilla")
  .timeout(3000)
  .post();

しかし、取得しようとしているページcookieで、リクエストごとに後続の送信が必要な場合はどうなるでしょうか? HTTP 接続応答ヘッダーを使用HttpURLConnectionPOSTて読み取ります。は、この作業を容易にします。ライブラリを使用して Web ページを文字列としてフェッチし、その文字列を関数に渡してドキュメントを取得します。 cookieHttpClientjsoup.parse()

于 2013-10-14T16:05:36.877 に答える