完美解決jsoup擷取響應内容不完整
Jsoup抓取網頁隻能抓取一部分不能完整擷取響應内容時,一般有以下幾個原因。
- 網絡異常,這個很少發生,jsoup會報告exception
- 網絡逾時,可以設定 connection.timeout(n) 增加逾時時間。
-
看起來都正常,沒有異常發生。 但是擷取的資料就是少了一截。
如果擷取到的資料不超過1024k,程式正常,得到的資料也正常。
一旦資料超過1024k時,資料就隻有預期得到資料的前1024k位元組了。
仔細查找jsoup的api 發現,預設設定下,jsoup最大擷取的響應長度正好時1M。
是以這個時候隻要設定 connection.maxBodySize(0),設定為0,就可以得到不限響應長度的資料了。
網上有人這樣寫說可以解決
Document = Jsoup.connect(url)
.header(“Accept-Encoding”, “gzip, deflate”)
.userAgent(“Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0”)
.maxBodySize(0)
.timeout(600000)
.get();
經過測試,這樣還是不能解決。
最終發現,下面這樣寫才能完美解決:
Response resp = Jsoup.connect(url)
.timeout(60000)
.method(Connection.Method.GET)
.maxBodySize(0)
.followRedirects(false)
.execute();
String htmlStr = new String(resp.bodyAsBytes());