使用 Jsoup 连接到 url,但 Jsoup 调用另一个 url。为什么?

Using Jsoup to connect to url, but Jsoup call another url. Why?

我尝试使用 Jsoup 来抓取这个

Document dok = Jsoup.connect("http://bola.kompas.com/ligaindonesia").userAgent("Mozilla/5.0").timeout(0).get();

但是出现这样的错误:

java.io.IOException: Too many redirects occurred trying to load URL http://m.kompas.com/bola

而且,当我键入以下内容时:

Document dok = Jsoup.connect("http://m.kompas.com/bola").userAgent("Mozilla/5.0").timeout(0).get();

出现这样的错误:

java.io.IOException: Too many redirects occurred trying to load URL http://bola.kompas.com

实际上这是我的完整代码:

import java.io.IOException;

import org.jsoup.Connection;
import org.jsoup.HttpStatusException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class MainBackup {
    public static void main(String[] args) throws IOException {
        processCrawling_kompas("http://bola.kompas.com/ligaindonesia");
    }

    public static void processCrawling_kompas(String URL){
        try{
            Connection.Response response = Jsoup.connect(URL).timeout(0).execute();
            int statusCode = response.statusCode();
            if(statusCode == 200){
                Document dok = Jsoup.connect(URL).userAgent("Mozilla/5.0").timeout(0).get();
                System.out.println("opened page: "+ URL);

                Elements nextPages = dok.select("a");
                for(Element nextPage: nextPages){
                    if(nextPage != null){
                        if(nextPage.attr("href").contains("bola.kompas.com")){
                            processCrawling_kompas(nextPage.attr("abs:href"));
                        }
                    }
                }
            }
        }catch (NullPointerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (HttpStatusException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

这里到底发生了什么?如何解决?

感谢之前的帮助:)

提供一个userAgent的想法是正确的。如果您在 Jsoup 的第一次调用中也这样做,它将按预期工作。

Connection.Response response = Jsoup.connect(URL)
            .userAgent("Mozilla/5.0")
            .timeout(0).execute();

顺便说一句 - 响应对象已经包含完整的 html,所以您不需要再次调用连接来获取文档。试试这个:

String URL = "http://bola.kompas.com/ligaindonesia";
Connection.Response response = Jsoup.connect(URL)
        .userAgent("Mozilla/5.0")
        .timeout(0).execute();
int statusCode = response.statusCode();
if(statusCode == 200){
    Document dok = Jsoup.parse(response.body(),URL);
    System.out.println("opened page: "+ URL);

    //your stuff

}

processCrawling_kompas 的第一行更改为:

Connection.Response response = Jsoup.connect(URL).userAgent("Mozilla/5.0").timeout(0).execute();

改变是添加用户代理!使用此代码,我能够获得以下输出:

opened page: https://login.kompas.com/act.php?do=ForgotPasswd&skin=default&sr=mykompas&done=http....