2012-12-10 123 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