2012-12-10 160 views
1

我不完全確定如何描述問題,但基本上,我使用JSoup來解析一些html並提取文章文本。我使用的方法是:Android和桌面應用程序

public static String getArticle(String articleLink) { 
    Log.i("article link", articleLink); 
    Document doc = null; 
    try { 
     doc = Jsoup.connect(articleLink).timeout(10000).get(); 
    } catch (IOException ioe) { 
     return null; 
    } 
    Elements articleBody = doc.select("div.article-body"); 
    Element first = articleBody.first(); 
    return first.text(); 
} 

當我拉出來的代碼這個片段中,以及在NetBeans中創建一個示例程序,並在鏈接傳遞到頁面,則返回文章就好了。但是,當我在我的android設備上運行它時,我在'return first.text()'處得到一個空指針。

我不知道這是怎麼回事。該應用程序已發佈並一直在運行,但突然間,它開始崩潰,導致我相信網頁佈局中的某些內容發生了變化,但我只運行了獨立程序,並通過了相同的文章鏈接,並且它工作正常在我的電腦上很好,但我得到了android上的nullPointer。相同版本的jsoup也一樣,有什麼想法?

更新:doc變量的值是:

<!DOCTYPE html> 
<html> 
<head> 
<title>Redirecting...</title> 
<meta http-equiv="refresh"  content="0;url=http://m.ncataggies.com/mobile/ViewArticle.dbml? atclid=205823481&amp;DB_MENU_ID=&amp;SPSID=&amp;SPID=&amp;DB_OEM_ID=24500" /> 
<meta name="ROBOTS" content="NOINDEX,NOFOLLOW" /> 
</head> 
<body> 
</body> 
</html> 

因此,一些的確發生了變化......

+0

什麼是你要刮的頁面? –

+0

http://www.ncataggies.com//ViewArticle.dbml?DB_OEM_ID=24500&ATCLID=205821772 – user1154644

+0

顯示logcat輸出 – Squonk

回答

3

ncataggies.com服務器檢查從請求中user-agent頭,和爲移動瀏覽器提供不同的頁面。由於您未指定用戶代理,因此服務器會看到Android提供的默認代理,該代理會將其標識爲移動瀏覽器。

jsoup您可以設置用戶代理是這樣的:

String ua = "Mozilla"; // I'd suggest using your current browser as reference  
doc = Jsoup.connect(url).userAgent(ua).timeout(10000).get(); 

您可以檢查當前用戶代理here

+0

完美,謝謝 – user1154644