2014-08-30 68 views
0

我正在嘗試使用Jsoup在幾個網址上工作。其中一個例子是:根據UserAgent字符串Jsoup讀取超時字符串

http://www.aceshowbiz.com/movie/

當我這樣做:

Document doc = Jsoup.connect(url).get(); 

它拋出

Exception in thread "main" java.net.SocketTimeoutException: Read timed out 

但是,當我設置一個用戶代理字符串,它工作正常

Document doc = Jsoup.connect(url).userAgent("Chrome").get(); 

雖然它不會對其他的UserAgent字符串的工作:

Document doc = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6").get(); 
//again a Read Time Out 

我在這裏的查詢是:此類案件發生了很多與我,當一個網站,允許一定的UserAgent字符串,一些網站只下載不使用時的UserAgent字符串。我不確定是什麼原因導致此類行爲。什麼是解決這個問題的方法。正如我所說的,在一些網站上,我只能在根本沒有使用任何字符串的情況下下載。這是服務器端的某種限制嗎?或者,如果一個網站沒有使用我的抓取工具的useragent字符串下載,我應該尊重它,不應該嘗試更多的案例,或者是某種錯誤。當然不確定爲什麼網站不允許某些useragent字符串/並且幾乎沒有使用任何useragent字符串時下載。

我也在http://www.bloombergview.com/topics/entertainment上測試了幾個useragent字符串,並發現它只能在很少的情況下下載。我們如何決定它的工作原理?

如果這是Jsoup的問題,我應該嘗試使用http下載頁面並提供它Jsoup.parse(html)?不知道那裏會遇到同樣的問題。

編輯:我希望我能夠傳達的問題: - >如何選擇一個正確的useragent字符串爲我的履帶,可以下載所有網站。我一定會將我的抓取工具名稱添加到useragent字符串中(如果這個信息很重要),但現在我用上面提供的一般字符串來解決問題。不知道以上情況發生了什麼。

+0

我試過用你發佈的用戶代理,它工作。 – alkis 2014-08-30 20:28:50

+0

感謝您的評論。 aceshowbiz似乎不適用於除「chrome」以外的其他任何內容,而bloomberg則使用上面列出的較長的useragent字符串。需要了解正在發生的事情以及爲什麼網站使用少量useragent字符串並且少數不起作用。和一個工作。 – akshayb 2014-08-30 20:36:55

+0

您運行'我也在http://www.bloombergview.com/topics/entertainment上測試了幾個useragent字符串,並且發現只有在使用** no useragent **字符串時纔會下載**。** – alkis 2014-08-30 20:40:18

回答

1

關於aceshowbiz,問題不在於userAgent,而是在於超時選項。 試試這個

Document doc = Jsoup.connect("http://www.aceshowbiz.com/movie/") 
        .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") 
        //.userAgent("Chrome") 
        .timeout(0) 
        .get(); 

我想看到的userAgent工作,另外一個沒有工作的一個例子。 你有嗎?

timeout(0)這消除了超時限制。你可以添加一些大數字,但在性能方面仍然可以接受

+0

謝謝。它在使用referrer時工作。不確定在抓取工具中使用引薦來源是否合乎道德/合法/有效,但無論如何要使用引薦來源。問題來自aceshowbiz,當我爲它調整useragent字符串時,其他網站沒有工作。我正在分析我所有的數據庫,看看是否存在這樣的錯誤。 – akshayb 2014-08-30 21:01:33

+0

我檢查了一下。問題不在於引用標頭,它與jsoup具有的默認超時選項一起使用。請參閱我的更新,它應該沒有引用。出於某種原因,使用引用鏈接器時它的工作速度會更快,因此您不會超過該超時限制。檢查更新的代碼。 – alkis 2014-08-30 21:04:44

+0

即使沒有userAgent標頭,它也能正常工作。它只是慢很多。 – alkis 2014-08-30 21:06:21