Parsing Jsoup

di Anonimizzato10182 il
21 risposte
Ciao amici sto cercando di fare il parsing del sito "http://*******************"
Di questo sito voglio prendermi tutti i titoli, i link e l'immagine di tutti gli articoli sulla sinistra.
Per il momento sto cercando di risolvere prendendo i titoli e i i riferimenti ai link.
Ho scritto il seguente codice,ma come risultato mi da solo i titoli degli articoli della colonna a sinistra, i link non me li stampa

Document doc = Jsoup.connect("http://**********/Sito2009/main.php").get();

Elements links = doc.select("a [class=sTitoloSinistra]");
for(Element link : links) {

System.out.println(link.attr("href"));
System.out.println(link.text());

Qualcuno mi può aiutare gentilmente?
Grazie mille a chiunque mi risponderà.

21 Risposte

  • Ciao ho dato un'occhiata rapida al sito e mi pare che gli elementi con classe "sTitoloSinistra" siano degli span e non degli anchor. Se così fosse allora la stringa che passi nella select è errata e probabilmente è per quello che non te la trova!
  • Degli anchor ?? cosa sono?
    Non sono molto pratico di html purtroppo e per poter prendere le informazioni che voglio io come dovrei fare?Mi puoi aiutare perfavore?
  • Gli anchor sono gli elementi "a". Attraverso quella stringa tu cerchi tutti gli elementi a di classe "sTitoloSinistra". Guardando l'html, invece, se vuoi ottenere tutti gli elementi degli articoli sulla sinistra devi ottenere il <tr> che li contiene. Purtroppo la tabella non ha un id, per cui bisogna trovare un attributo "univoco" e in questo caso mi pare che l'ideale sia "width = 180px".
    Per questo motivo io farei così:
    
    Document doc = Jsoup.connect("http://***********").get();
    		
    		Element tbody = doc.select("table[width=180]").first().child(0);
    		
    		Elements rows = tbody.children();
    		
    		//Rimuovo i primi 4 elementi che non sono utili
    		rows.remove(0);
    		rows.remove(0);
    		rows.remove(0);
    		rows.remove(0);
    		
    		for (Element row : rows) {
    			//Controllo se è vuota o meno
    			Element td = row.child(0);
    			if (td.className().equals("sDataSinistra")){
    				continue;
    			}
    			
    			String link = td.select("a").first().attr("href");
    			
    			System.out.println(link);
    		}
    
    In questo modo trovi tutti i link degli articoli e, in maniera simile, puoi trovare anche tutte le altre informazioni che ti servono!
  • Grazie mille Della ho aggiunto questa riga al tuo codice :

    String titolo = td.select("a").first().text();

    System.out.println(titolo);

    ed ora ottengo il titolo più il link finalmente!!!!grazie
    però ho controllato l'output e l'ultimo titolo non me lo stampa,mi stampa solo il relativo link come mai?
  • Ho asteriscato il link visto che si tratta di un sito terzo
  • @Toki: non sapevo che non si potessero linkare i siti esterni, sorry!

    @MacGigi: la riga che hai aggiunto mi pare sbagliata, cosa ti mostra?
    Comunque ho controllato l'html ed effettivamente l'ultimo articolo è "errato", ovvero presenta una struttura diversa da tutti gli altri articoli. In ogni caso con questo codice dovrebbe funzionare:
    
    for (Element row : rows) {
    			//Controllo se è vuota o meno
    			Element td = row.child(0);
    			if (td.className().equals("sDataSinistra")){
    				continue;
    			}
    			
    			String link = td.select("a").first().attr("href");
    			String titolo = td.select("a span").first().text();
    			System.out.println(link);
    			System.out.println(titolo);
    			System.out.println();
    		}
    
  • Grazie mille toky penso appena tornò a casa lo provo.
    Comunque grazie mille per l'aiuto che mi hai dato,lo stesso vale per Dalla siete stati davvero gentili e siete stati in grado di risolvere il mio problema . Ho provato a chiedere diverse volte aiuto su questo problema e mai nessuno mi ha saputo o meglio non mi ha voluto aiutare.
    Grazie davvero, comunque poi quando tornò a casa lo controllo
    Grazie e Buona Domenica delle palme a tutti voi.
  • Ero sempre io, ma fa niente

    Le altre cose di interesse (immagini, altro testo, ecc..) le trovi in maniera simile, cercando gli elementi HTML di interesse ed estraendone il contenuto.

    Buona domenica anche a te
  • Oddio scusami per la confusione infatti adesso leggendo meglio ho capito anche meglio il senso del messaggio di toky sorry sto in giro ed ho letto male comunque gradir di nuovo.
  • Tranquillo capita spesso anche a me, non c'è assolutamente nessun problema
  • Ciao Della ho controllato e va tutto alla grande grazie mille per l'aiuto!!
  • Ottimo, meglio così
  • Ciao Della scusami se ti contatto nuovamente ma il sito in questione di cui tu eri stato molto gentile a parsarmelo , ha cambiato delle cose e quindi il parsing che avevo non funziona più -.-
    Ho provato a fare in questo modo e riesco solo a prendermi i titoli e funziona,però ho cercato di prendermi anche i link e l'immagine ma non ci sto riuscendo , mi potresti aiutare perpiacere?

    Il parsing che ho fatto io è il seguente:

    Element tbody = doc.select("table[width=180]").first().child(0);

    Elements sezioni = tbody.getElementsByTag("tr");

    for(Element sezione : sezioni)//per ogni sezione tra gli elementi ricavati prima
    {
    Elements righe_sezione = sezione.getElementsByClass("sTitoloSinistra");
    for(Element riga : righe_sezione)
    {
    String titolo = riga.getElementsByClass("sTitoloSinistra").first().text();
    System.out.println(titolo);
    System.out.println("\n");
    }
    }
  • Ciao! Non ricordo il link della pagina se puoi mandarmi un MP ci do un'occhiata!
Devi accedere o registrarti per scrivere nel forum
21 risposte