Java 解析页面时不会显示任何内容
我第一次尝试解析html页面以显示论坛(androidiani.com/forum)的分区列表。但是没有显示任何内容,我也不明白为什么。代码位于顶部。您在以下行中有错误:Java 解析页面时不会显示任何内容,java,android,parsing,jsoup,Java,Android,Parsing,Jsoup,我第一次尝试解析html页面以显示论坛(androidiani.com/forum)的分区列表。但是没有显示任何内容,我也不明白为什么。代码位于顶部。您在以下行中有错误: @Override protected String doInBackground(String... params) { try { // NB: controllate di importare le classi giuste // all'in
@Override
protected String doInBackground(String... params) {
try {
// NB: controllate di importare le classi giuste
// all'inizio ci deve essere org.jsoup
// ricavo l'html della pagina con user agent desktop (Chrome)
// e timeout 30000
Document doc = Jsoup.connect("http://www.androidiani.com/forum")
.userAgent("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22")
.timeout(30000).get();
// prendo la tabella
// (con .first() ottengo il primo elemento, in questo caso l'unico )
Element tabella = doc.getElementsByClass("floatcontainer").first();
// prendo gli elementi che mi interessano dalla tabella
Elements sezioni = tabella.getElementsByClass("forumtable td");
for(Element sezione : sezioni)//per ogni sezione tra gli elementi ricavati prima
{
//ricavo ogni riga nella sezione
Elements righe_sezione = sezione.getElementsByClass("foruminfo");
for(Element riga : righe_sezione)
{
//prelevo la cella delle info
Element info = riga.getElementsByClass("datacontainer").first();
// ricavo il titolo
// (con .text() ottengo il testo non formattato
String titolo = info.getElementsByClass("forumtitle").first().text();
// ricavo la descrizione
// (uso .first() per essere sicuro che sia proprio la descrizione
// e non i moderatori )
String descrizione = info.getElementsByTag("p").first().text();
// inserisco nei rispettivi arraylist
titoli.add(titolo);
descrizioni.add(descrizione);
}
}
} catch (Exception e) {
// gestione dell'eccezione
// ad esempio mostrare messaggio di errore o altro (qui nel logcat)
Log.e("ESEMPIO", "ERRORE NEL PARSING");
}
return null;
}
据我所知,这应该是:
Element tabella = doc.getElementsByClass("floatcontainer").first();;
tabella.getElementsByClass("forumtable td")
使用Chrome的开发工具对这类工作有很大帮助
更新
工作守则:
Element tabella = doc.getElementById("forums");
Elements sezioni = tabella.select(".foruminfo.td");
你的路线正确吗?检查你的xpath…论坛在,所以它是正确的。还有什么?我找不到错误。我只有一个空白活动。你尝试过什么样的调试?我从本教程开始,使用chrome的开发工具查看html和css。你是什么意思?然后呢?我不知道我必须解析哪些元素。我的意思是,好的
论坛
,.foruminfo.td
和??我正在使用chrome开发者工具,但我不明白我必须写什么。试着阅读CSS选择器<代码>选项卡。选择执行一个。基本上,tabella.select(“.foruminfo.td”)
就是您所说的tabella.getElementsByClass(“forumtable td”)
。以这种方式申请两门课。使用getElementsByClass(…)
可以按单个类进行搜索,因此在您的情况下,它什么也找不到。我尝试在论坛和.foruminfo.td
之后插入.forumdata、.datacontainer和.forumtitle
,但总是空白活动:(迟做总比不做强,哈!
public static void main(String[] args) throws Exception {
try {
// NB: controllate di importare le classi giuste
// all'inizio ci deve essere org.jsoup
// ricavo l'html della pagina con user agent desktop (Chrome)
// e timeout 30000
Document doc = Jsoup.connect("http://www.androidiani.com/forum")
.userAgent("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22")
.timeout(30000).get();
// prendo la tabella
// (con .first() ottengo il primo elemento, in questo caso l'unico )
Element tabella = doc.getElementById("forums");
// prendo gli elementi che mi interessano dalla tabella
Elements sezioni = tabella.select(".foruminfo.td");
for(Element sezione : sezioni)//per ogni sezione tra gli elementi ricavati prima
{
//ricavo ogni riga nella sezione
Elements righe_sezione = sezione.getElementsByClass("foruminfo");
for(Element riga : righe_sezione)
{
//prelevo la cella delle info
Element info = riga.getElementsByClass("datacontainer").first();
// ricavo il titolo
// (con .text() ottengo il testo non formattato
String titolo = info.getElementsByClass("forumtitle").first().text();
// ricavo la descrizione
// (uso .first() per essere sicuro che sia proprio la descrizione
// e non i moderatori )
String descrizione = info.getElementsByTag("p").first().text();
// inserisco nei rispettivi arraylist
System.out.println("titolo = " + titolo);
System.out.println("descrizione = " + descrizione);
}
}
} catch (Exception e) {
// gestione dell'eccezione
// ad esempio mostrare messaggio di errore o altro (qui nel logcat)
e.printStackTrace();
}
}