Java 使用Jsoup连接到url,但Jsoup调用另一个url。为什么?
我试着用Jsoup来抓取这个Java 使用Jsoup连接到url,但Jsoup调用另一个url。为什么?,java,url,jsoup,Java,Url,Jsoup,我试着用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 java.io.IOExcepti
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
java.io.IOException: Too many redirects occurred trying to load URL http://bola.kompas.com
而且,当我键入以下内容时:
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://m.kompas.com/bola
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();
}
}
}
这里到底发生了什么?如何解决这个问题
感谢您之前的帮助:提供用户代理的想法是正确的。如果在Jsoup的第一次调用中也这样做,它将按预期工作
Connection.Response response = Jsoup.connect(URL)
.userAgent("Mozilla/5.0")
.timeout(0).execute();
顺便说一下,响应对象已经包含完整的html,因此您不需要再次调用connect来访问文档。试试这个:
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
}
提供用户代理的想法是正确的。如果在Jsoup的第一次调用中也这样做,它将按预期工作
Connection.Response response = Jsoup.connect(URL)
.userAgent("Mozilla/5.0")
.timeout(0).execute();
顺便说一下,响应对象已经包含完整的html,因此您不需要再次调用connect来访问文档。试试这个:
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
}
将进程爬网的第一行更改为: 更改是添加用户代理!使用此代码,我能够获得以下输出:
opened page: https://login.kompas.com/act.php?do=ForgotPasswd&skin=default&sr=mykompas&done=http....
将进程爬网的第一行更改为: 更改是添加用户代理!使用此代码,我能够获得以下输出:
opened page: https://login.kompas.com/act.php?do=ForgotPasswd&skin=default&sr=mykompas&done=http....
Try.followRedirectstrue。我无法用完全相同的代码重现您的问题,您需要向我们提供更多信息。我已在帖子中添加了完整的代码,抱歉@JoelMinTry.followRedirectstrue.我无法用完全相同的代码重现您的问题,您需要向我们提供更多信息。我已在帖子中添加了完整的代码,抱歉@乔尔明