2012-01-20 50 views
1

我正在開發一個Android項目,我正在玩JSoup以從應用程序的網站提取數據。JSoup - 錯誤提取div的內容

我要定位的網站是here

我想提取主要信息文本。針對該分區的XPath是

//div[@id='wikiAbstract']

我的完整代碼如下

public class Main extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    TextView tv = (TextView) findViewById(R.id.textView1); 
    Document doc = null; 

    try { 
     doc = Jsoup.connect("http://www.last.fm/music/Bright+Eyes").get(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    Element divs = doc.select("div#wikiAbstract").first(); 
    tv.setText(divs.text()); 

}

但是,我得到一個空指針異常。我已經在其他網站和div上測試過相同的代碼,並且它完美地工作。我不明白爲什麼這是不同的。

我希望任何人的幫助/反饋,在此先感謝。

回答

1

啊,好的,here的html內容來自於last.fm網站的移動版本,因此div ID是不同的。

對於任何人誰可能會遇到這種情況,可以在用戶代理請求頭添加到連接,以確保充分的網站要求或只是確保你的移動網站得到正確的DIV ID的

Document doc = Jsoup.connect(myURL) 
       .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1") 
       .get(); 
0

該完整的程序:

public static void main(String[] args) throws IOException { 
    Document doc = Jsoup.connect("http://www.last.fm/music/Bright+Eyes").get(); 
    Element content = doc.select("div#wikiAbstract").first(); 
    System.out.println(content.text()); 
} 

輸出(縮短):

明亮的眼睛是主要由美國歌手,吉他, 和歌曲康納爾奧伯斯特的頻帶。明亮的眼睛還設有 多樂器/製片人邁克·莫吉斯,鍵盤手內特 沃爾科特和主要來自 內布拉斯加州奧馬哈,繪製合作者的輪換陣容,而...

...這是說您的錯誤位於其他地方。也許textViewnull

一般課這裏是它是付出來提取出你認爲失敗的部分,並確認您的懷疑之前繼續前進。