2016-09-25 77 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

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