2016-09-25 35 views
2

我有这样的代码:如何在Jsoup中重定向URL?

int pageNum = 1; 
     List<String> urlLink = new ArrayList<String>(); 
     Document doc = Jsoup.connect("http://secret-site?pagenum=" + pageNum).followRedirects(true).userAgent("Chrome/51.0.2704.103").timeout(0) 
       .get(); 
     Elements links = doc.select("td[align] .midtext > a"); 
     for(Element e : links) { 
      if (e.attr("href").contains("title_about")) { 
       urlLink.add(e.attr("href")); 
       } 
       if(urlLink.size()%100==0) { 
        pageNum++; 
        // how to redirect doc? 
       } 
       if (pageNum==3) { 
        break; 
       } 
      } 

如何使这将是在页次增加的页已经被更新的情况?

对不起,我的英语。

+0

重定向到哪个'doc'?你是否试图将你的程序重定向到'Document doc = Jsoup.connect ....'这一行? –

+0

是的,我有http:// secret-site?pagenum = 1,当jsoup抓取所有链接时我需要去http:// secret-site?pagenum = 2 –

+0

所以基本上每当你的条件'urlLink.size ()%100 == 0'是真的,你想从头开始执行程序吗? –

回答

0

当更改url中的pagenum值时,您正在更改请求的GET参数,因此您必须通过再次调用Jsoup.connect(...).get()来请求新请求的结果页。 您可以更改url-string(“http://secret-site?pagenum=2”),但我发现使用.data("key","value")方法更具可读性。 用一个循环包围你的代码来增加pagenum的值,你就完成了。

实施例代码

String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"; 
int numberOfResultpages = 3; 
String url = "http://secret-site"; 

List<String> urlLink = new ArrayList<String>(); 

Document doc; 

for (int i = 1; i < numberOfResultpages; i++) { 

    try { 
     doc = Jsoup.connect(url).userAgent(userAgent) 
       .data("pagenum", "" + i) 
       .method(Method.GET).get(); 

     for (Element e : doc.select("td[align] .midtext > a")) { 

      if (!e.attr("href").contains("title_about")) 
       continue; 

      urlLink.add(e.attr("href")); 

      if(urlLink.size()%100==0) { 
       break; 
      } 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

它的工作原理。非常感谢! –