我正在做一个Android项目,目前正在使用JSoup从网站上为应用程序提取数据。
我的目标网站在这里。
我想提取主要信息文本。该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上测试过同样的代码,它运行得很好。我不明白为什么这是不同的。
我将感谢任何人的帮助/反馈,提前感谢。
好吧,这里的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();
这个完整的程序:
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());
}
输出(缩短):
明亮的眼睛是一个主要由美国歌手,吉他手,和词曲作者康纳·奥伯斯特。明亮的眼睛也有多乐器演奏家/制作人Mike Mogis,键盘手Nate沃尔科特和主要来自奥马哈,内布拉斯加州和。。。
也就是说,您的错误位于其他地方。也许textView
就是null
?
这里的一般教训是,在继续前进之前,提取出你认为失败的部分并确认你的怀疑是值得的。