JSoup - 提取div内容时出错

时间:2012-01-20 18:00:52

标签: java android nullpointerexception web-scraping jsoup

我正在开发一个Android项目,我目前正在玩JSoup从网站上提取该应用程序的数据。

我定位的网站是here

我想提取主要信息文本。该div的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上测试了相同的代码,它完美无缺。我无法理解为什么会有所不同。

我希望得到任何人的任何帮助/反馈,谢谢。

2 个答案:

答案 0 :(得分:1)

啊,好吧所以来自here的html内容来自last.fm网站的移动版本,所以div的内容不同。

对于可能遇到此问题的任何人,您可以向连接添加用户代理请求标头,以确保请求完整的网站,或者只是确保您从移动网站获得正确的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();

答案 1 :(得分: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());
}

输出(缩短):

  

Bright Eyes是一支乐队,主要由美国歌手,吉他手,   和歌曲作者Conor Oberst。明亮的眼睛也有特色   多乐器演奏家/制片人Mike Mogis,键盘手Nate   沃尔科特和一个主要来自的合作者轮流阵容   奥马哈,内布拉斯加州和......

...也就是说你的错误位于其他地方。也许textViewnull

这里的一般教训是,在继续之前提取您认为失败的部分并确认您的怀疑是值得的。