Веб-сайт очистки Java с обязательным входом в систему с использованием Jsoup

Я хочу распечатать некоторые данные (div с class="news_article") с streetinsider.com. Я создал учетную запись, и мне нужно войти в систему, чтобы получить доступ к этим данным.

Может ли кто-нибудь объяснить мне, почему этот код не работает? Я много пробовал, но ничего не работает.

    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);
    }
}

person zardlemalefique    schedule 07.04.2016    source источник
comment
почти уверен, что предполагается HTTP BASIC AUTH, а это не то, что требуется веб-сайту. Вам нужно будет получить токен сеанса и подделать сеанс.   -  person Tyler Sebastian    schedule 08.04.2016


Ответы (1)


Ваш код не позволяет вам войти на веб-сайт.... Попробуйте использовать приведенный ниже код для входа на веб-сайт.

Для входа на сайт:

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();

Итак, вы вошли в систему, однако веб-сайт, похоже, определяет, вошли ли вы в другой браузер или соединение, и просит вас сначала разорвать это соединение. Итак, ниже приведен код для завершения соединения:

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();

Все хорошо, теперь res2 будет содержать домашнюю страницу вашей учетной записи, затем вы можете перейти на любую страницу, которую хотите. Для получения дополнительной информации о том, как войти на веб-сайт с помощью Jsoup, ознакомьтесь со следующим руководством:

Как войти в веб-сайт с Jsoup

person Joel Min    schedule 08.04.2016
comment
О боже, большое спасибо @Joel Min, это работает, и я понял, почему! Это именно то, что я искал, вы спасли мой день! - person zardlemalefique; 08.04.2016
comment
Не волнуйся, брат, рад, что это помогло :) - person Joel Min; 08.04.2016
comment
Не могу дождаться, когда смогу помочь людям, как вы только что сделали. Добрый день, сэр :) - person zardlemalefique; 08.04.2016