2014-06-13 47 views
0

我面臨兩個問題的正確數據:JSoup需要太長的時間來加載和有時使用JSoup刮從網絡數據時不取

  1. 它的表現並不好:它需要一個有點太長連接到一個URL。

  2. 對於某些網站,它不會從URL中獲取正確的數據。例如,嘗試了紐約時報的任何URL,比如 - http://www.nytimes.com/2014/06/13/technology/facebook-to-let-users-alter-their-ad-profiles.html?ref=technology

它只是加載登錄頁面,但是當我嘗試在谷歌或Facebook相同的URL,他們正確地獲取數據。此外,該URL可以在瀏覽器中爲來賓用戶正常加載。

+2

NYT要求您的應用程序能夠處理coockies - 否則您的請求會被重定向到登錄頁面,據我所知。本主題的相似主題:[使用JSoup提取NYT文章](http://stackoverflow.com/questions/24078520/extract-new-york-times-articles-using-jsoup)和[如何使用JSoup管理Cookie]( http://stackoverflow.com/questions/9069288/how-to-manage-cookies-with-jsoup)。此外,這[鏈接](http://stackoverflow.com/questions/6432970/jsoup-posting-and-cookie)可能是你感興趣的 –

回答

1

這裏發生的事情是,紐約時報正在使用會話cookie來確定他們是否應該向您顯示內容,或將您重定向到登錄頁面。

因爲JSoup正在丟棄cookie,您將始終檢索登錄頁面,而不是將其發送回內容。

根據JSoup文檔,您可以使用cookies()方法檢索響應中的cookie。

然後,您可以使用連接上的cookies(Map<String, String>)方法在您的下一個請求中設置它們。

然後,您可以管理您的請求/響應鏈中的Cookie。


這不是專門JSoup問題,您可以複製同樣的事情在命令行上捲曲:

curl -v http://www.nytimes.com/… 

返回「看到其他的」登錄頁面的位置請求

curl -v http://www.nytimes.com/glogin?URI=http%3A%2F%2Fwww.nytimes.com%2F… 

滴一個cookie &提供了一個「302」請求送你回頁面。

如果我再次請求該頁面,我將開始這個過程,除非我將他們的會話cookie與我的請求一起發送。