2012-12-01 54 views
0
Document doc = Jsoup.connect("http://www.utah.edu/").get(); 
    Elements lists = doc.select("ul"); 
    for (Element list: lists) { 
     Elements li = list.select("li a"); 
     if (li.size() > 0) { 
      ArrayList<String> anchors = new ArrayList<String>(); 
      for (Element e : li) { 
       anchors.add(e.text()); 
      } 
      System.out.println(anchors); 
     } 
    } 

我想抓住從this pageul標籤呈現所有HTML列表。但它失敗了。我懷疑頁面中有腳本阻止我的程序這樣做。任何JavaScript阻止我的程序抓取此頁

編輯:爲了使我的問題就更簡單了,考慮下面的代碼:

Document doc = Jsoup.connect("http://www.utah.edu/").get(); 
Elements lists = doc.select("ul"); 
System.out.println(lists.size()); 

輸出:

0 
+0

*但失敗*究竟發生什麼事呢?是否有錯誤訊息?我不認爲頁面可以使用任何腳本來阻止您解析它。但是,如果您的HTTP請求中未包含用戶代理,則有時Web服務器將阻止您下載頁面。 – McGarnagle

+0

@dbaseman程序成功運行,但沒有輸出發送到控制檯。現在我確定我的程序沒有提取任何列表。 –

+2

@TerryLi jsoup不會執行JavaScript。 – xiaoyi

回答

1

一個可能的答案是,在用戶代理頭髮送由jsoup讓utah.edu認爲這是一個機器人而不是瀏覽器。所以它返回其他頁面內容。

org/jsoup/helper/HttpConnection.java實施get(),它不會發送用戶代理標頭默認情況下,除非另有說明。

因此,您需要使用userAgent()手動設置它。

例,僞造鉻:

String ua = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"; 
Document doc = Jsoup.connect("http://www.utah.edu/").userAgent(ua).get(); 
相關問題