我正在尝试解析此网站http://multiplayer.it/但没有任何正面结果..这是主要活动:
public class MainActivity extends Activity {
ListView lista;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lista = (ListView)this.findViewById(R.id.main_lista);//recupero lista da id
//creo ed eseguo l'asynctask
ParsingPaginaWeb parsing = new ParsingPaginaWeb();
parsing.execute("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class ParsingPaginaWeb extends AsyncTask<String,String,String> {
ArrayList<String> titoli; //lista dei titoli
ArrayList<String> descrizioni; //lista delle descrizioni
@Override
protected void onPreExecute()
{
//prima di eseguire il parsing inizializzo gli arraylist
titoli = new ArrayList<String>();
descrizioni = new ArrayList<String>();
}
@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.multiplayer.it")
.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("news_wrapper");
// prendo gli elementi che mi interessano dalla tabella
Elements sezioni = tabella.getElementsByClass("content");
for(Element sezione : sezioni)//per ogni sezione tra gli elementi ricavati prima
{
//ricavo ogni riga nella sezione
Elements righe_sezione = sezione.getElementsByClass("news-col-2");
for(Element riga : righe_sezione)
{
//prelevo la cella delle info
Element info = riga.getElementsByClass("news-box two_columns three_columns").first();
// ricavo il titolo
// (con .text() ottengo il testo non formattato
String titolo = info.getElementsByTag("h3").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", "ERROR");
}
return null;
}
@Override
protected void onPostExecute(String result)
{
// dopo che ho eseguito il parsing mostro i dati nella listview
// usando il custom array adpater ParsingArrayAdapter
ParsingArrayAdapter adapter = new ParsingArrayAdapter(MainActivity.this, titoli, descrizioni);
lista.setAdapter(adapter);
}
}
}
正如您所看到的,我只需要显示标题“titoli
”而不是“descrizioni
”..但我的活动中没有显示任何内容..它是空白的...有人可以帮我这个解析好吗?
答案 0 :(得分:0)
诀窍在于选择器语法,我编写了"h3 > a[href]"
,这意味着选择具有href属性的所有元素,这些元素是一个的直接后代。这是我的代码,我相信它会检索所有标题。
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://www.multiplayer.it")
.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();
// Select all the <a> elements with an href attribute which are immediate
// descendants of an <h3> element.
Elements links = doc.select("h3 > a[href]");
for (Element link : links) {
System.out.println(link.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}