我正在开发一个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上测试了相同的代码,它完美无缺。我无法理解为什么会有所不同。
我希望得到任何人的任何帮助/反馈,谢谢。
答案 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 沃尔科特和一个主要来自的合作者轮流阵容 奥马哈,内布拉斯加州和......
...也就是说你的错误位于其他地方。也许textView
是null
?
这里的一般教训是,在继续之前提取您认为失败的部分并确认您的怀疑是值得的。