2013-07-17 18 views
6

Sto tentando di utilizzare JSoup per analizzare i risultati di ricerca di Google. Attualmente questo è il mio codice.Utilizzo di JSoup per analizzare i risultati di Google

public class GoogleOptimization { 
public static void main (String args[]) 
{ 
    Document doc; 
    try{ 
     doc = Jsoup.connect("https://www.google.com/search?as_q=&as_epq=%22Yorkshire+Capital%22+&as_oq=fraud+OR+allegations+OR+scam&as_eq=&as_nlo=&as_nhi=&lr=lang_en&cr=countryCA&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=").userAgent("Mozilla").ignoreHttpErrors(true).timeout(0).get(); 
     Elements links = doc.select("what should i put here?"); 
     for (Element link : links) { 
       System.out.println("\n"+link.text()); 
    } 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

} 

Sto solo cercando di ottenere il titolo di risultati di ricerca e i frammenti sotto il titolo. Quindi sì, non so quale elemento cercare per scriverle. Se qualcuno ha un metodo migliore per raschiare Google usando java mi piacerebbe sapere.

Grazie.

+0

Quindi vuoi il testo che hai inserito per la ricerca e i link principali di tutti i risultati della ricerca? – Collin

+0

Voglio il testo che ho inserito per cercare e quindi utilizzare jsoup per estrarre i titoli/corpo dei risultati della ricerca, non i collegamenti principali. – user2405920

+1

Sei sicuro che sia consentito da Google? – mael

risposta

11

Ecco qui.

public class ScanWebSO 
{ 
public static void main (String args[]) 
{ 
    Document doc; 
    try{ 
     doc =  Jsoup.connect("https://www.google.com/search?as_q=&as_epq=%22Yorkshire+Capital%22+&as_oq=fraud+OR+allegations+OR+scam&as_eq=&as_nlo=&as_nhi=&lr=lang_en&cr=countryCA&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=").userAgent("Mozilla").ignoreHttpErrors(true).timeout(0).get(); 
     Elements links = doc.select("li[class=g]"); 
     for (Element link : links) { 
      Elements titles = link.select("h3[class=r]"); 
      String title = titles.text(); 

      Elements bodies = link.select("span[class=st]"); 
      String body = bodies.text(); 

      System.out.println("Title: "+title); 
      System.out.println("Body: "+body+"\n"); 
     } 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 

Inoltre, per farlo da solo suggerirei di usare chrome. Fai semplicemente clic con il pulsante destro del mouse su ciò che vuoi raschiare e vai a ispezionare l'elemento. Ti porterà esattamente nel punto in cui si trova quell'elemento. In questo caso, prima vuoi scoprire dove si trova la radice di tutti gli elenchi dei risultati. Quando lo trovi, vuoi specificare l'elemento e preferibilmente un attributo unico per cercarlo. In questo caso l'elemento principale è

<ol eid="" id="rso"> 

Qui di seguito che si vedrà una serie di annunci che iniziano con

<li class="g"> 

Questo è ciò che si desidera inserire nel vostro elementi iniziali array, quindi per ogni elemento vorrete trovare il punto in cui sono il titolo e il corpo. In questo caso, ho trovato il titolo sotto

<h3 class="r" style="white-space: normal;"> 
elemento

. Quindi cercherai quell'elemento in ogni elenco. Lo stesso vale per il corpo. Ho trovato il corpo sotto così l'ho cercato usando il metodo .text() e ha restituito tutto il testo sotto quell'elemento. La chiave è SEMPRE provare e trovare l'elemento con un attributo originale (usare un nome di classe è l'ideale). Se non lo fai e cerchi solo qualcosa come "div" cercherà l'intera pagina per QUALSIASI elemento contenente div e lo restituirà. Quindi otterrai più risultati di quanti ne vuoi. Spero che questo lo spieghi bene. Fammi sapere se hai altre domande.

+0

Modificata la mia risposta, spero che abbia senso. Come ho detto, suggerirei di usare chrome. È fantastico fare qualsiasi cosa con un sito web (HTML, CSS, rete, script). Praticamente qualsiasi cosa. – Collin

+0

Crap, per qualche ragione non mi permette di postare l'HTML nel testo. Datemi un secondo per modificarlo EDIT: OK, capito subito lol – Collin

+0

Grazie, questo aiuta molto. – user2405920

Problemi correlati