2015-07-04 118 views
1

我不太瞭解jsoup或HTML解析。我試圖從whitepages.com拉動信息Jsoup,http錯誤416,解析HTML

try { 
     Document doc = Jsoup.connect("http://www.whitepages.com/phone/1-###-###-####").get(); 
     numberinfo = doc.select(".phone-list-data"); 
    } 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

我得到org.jsoup.HttpStatusException: HTTP error fetching URL.與狀態416

我做了一些研究,它顯示了一些有關的範圍,它有與輸入做最後的具體電話號碼?

有沒有辦法讓這樣的jsoup解析信息?

+0

你能舉一個例子網址是什麼? –

+0

您可以將### - ### - ####更改爲任何電話號碼, 480-307-7421 這應該比亞利桑那州的手機號碼更有可能。 – failsatheals

回答

0

好吧所以Http 416當你要求更多的數據比可用時發生錯誤,這樣的請求在語法上有效但不可滿足。例如,如果要請求1K bytes的文件,並且服務器上的實際文件小於請求的大小,則服務器將發出416錯誤。如果您請求的字節數少於服務器內容的實際大小,則會收到http響應狀態206(部分內容)。

爲什麼發生在你的情況? 也許這是我猜不太確定,Jsoup正在爲您的請求添加範圍標頭,請參閱Jsoup中的Jsoup.connect(url).maxBodySize(),它設置要讀取的最大字節數,默認值爲1MB。在你的情況下,即使你改變這個200 bytes也會發生同樣的錯誤。

解決方案:Jsoup.connect(url)方法後添加ignoreHttpErrors(true)忽略這樣的錯誤,e.g:

 try { 
      Document doc = Jsoup.connect("http://www.whitepages.com/phone/1-###-###-####").ignoreHttpErrors(true).get(); 
      Elements elements = doc.select(".phone-list-data"); 
      System.out.println(doc.html()); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
+0

我想我得到某種拒絕返回的訪問。我正在獲取HTML頁面信息,但我無法看到任何特定的內容,例如我是否直接在頁面上查看源代碼。我知道這是可以做到的,因爲在瀏覽器中「嘗試jsoup在線」完美地適用於它。 – failsatheals