Parsing Jsoup

di il
21 risposte

Parsing Jsoup

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

  • Re: Parsing Jsoup

    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!
  • Re: Parsing Jsoup

    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?
  • Re: Parsing Jsoup

    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!
  • Re: Parsing Jsoup

    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?
  • Re: Parsing Jsoup

    Ho asteriscato il link visto che si tratta di un sito terzo
  • Re: Parsing Jsoup

    @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();
    		}
    
  • Re: Parsing Jsoup

    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.
  • Re: Parsing Jsoup

    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
  • Re: Parsing Jsoup

    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.
  • Re: Parsing Jsoup

    Tranquillo capita spesso anche a me, non c'è assolutamente nessun problema
  • Re: Parsing Jsoup

    Ciao Della ho controllato e va tutto alla grande grazie mille per l'aiuto!!
  • Re: Parsing Jsoup

    Ottimo, meglio così
  • Re: Parsing Jsoup

    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");
    }
    }
  • Re: Parsing Jsoup

    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