2016-04-07 5 views
2

streetinsider.comからいくつかのデータ(div = class "news_article")を印刷したいと思います。アカウントを作成したので、そのデータにアクセスするにはログインする必要があります。Jsoupを使用してログインする必要のあるJavaスクラップウェブ

誰でもこのコードが機能しない理由を説明できますか?私はたくさん試しましたが、何も動いていません。

public static final String SPLIT_INTERNET_URL = "http://www.streetinsider.com/Special+Dividends?offset=55"; 
public static final String SPLIT_LOGIN = "https://www.streetinsider.com/login.php"; 

/** 
* @param args the command line arguments 
* @throws java.io.FileNotFoundException 
* @throws java.io.UnsupportedEncodingException 
* @throws java.text.ParseException 
* @throws java.lang.ClassNotFoundException 
*/ 
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException, IOException, ParseException, ClassNotFoundException { 
    // TODO code application logic here 
    Response res = Jsoup.connect(SPLIT_LOGIN) 
      .data("loginemail", "XXXXX", "password", "XXXX") 
      .method(Method.POST) 
      .execute(); 
    Document doc = res.parse(); 

    Map<String, String> cookies = res.cookies(); 

    Document pageWhenAlreadyLoggedIn = Jsoup.connect(SPLIT_INTERNET_URL).cookies(cookies).get(); 
    Elements elems = pageWhenAlreadyLoggedIn.select("div[class=news_article]"); 
    for (Element elem : elems) { 
     System.out.println(elem); 
    } 
} 
+0

それは、ウェブサイトが必要とするものではありませんHTTP基本認証を想定しているかなり確信:Jsoupでウェブサイトにログインする方法の詳細については、次のチュートリアルを見てみましょう。セッショントークンを取得してセッションを偽装する必要があります。 –

答えて

2

お客様のコードでは、ウェブサイトにログインしていません。下記のコードを試して、ウェブサイトにログインしてください。ウェブサイトにログインするために

Connection.Response res = Jsoup.connect(SPLIT_LOGIN) 
      .data("action", "account", 
       "redirect", "account_home.php?", 
       "radiobutton", "old", 
       "loginemail", "XXXXX", 
       "password", "XXXXX", 
       "LoginChoice", "Sign In to Secure Area") 
      .method(Connection.Method.POST) 
      .followRedirects(true) 
      .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36") 
      .execute(); 

だからあなたが今ログインしている、しかし、ウェブサイトは、あなたが、他のブラウザや、接続してあなたが最初にその接続を終了する要求をログインしているかどうかを検出するようです。そこで、以下の接続を終了するためのコードです:すべての良い、今res2意志があなたのアカウントのホーム・ページが含まれてい

Connection.Response res2 = Jsoup.connect("http://www.streetinsider.com/login_duplicate.php") 
      .data("ok", "End Prior Session") 
      .method(Connection.Method.POST) 
      .cookies(res.cookies()) 
      .followRedirects(true) 
      .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36") 
      .execute(); 

、あなたは、あなたが好きなページに移動するには進むことができます。

How to login to a website with Jsoup

+0

Omgは本当にありがとう@ジョエルミンそれは働いていると私はなぜ理解した! これはまさに私が探していたものです。 – zardlemalefique

+0

兄さん、心配兄弟、喜んでそれを助けました:) –

+0

ちょうどあなたのような人々を助けることができるように待つことができません。良い一日を送ってください:) – zardlemalefique

関連する問題