2013-07-17 20 views
6

Arama sonuçlarını Google'dan kazımak için JSoup kullanmaya çalışıyorum. Şu anda bu benim kodum.Google Sonuçları kazımak için JSoup kullanma

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(); 
    } 
} 

} 

Sadece arama sonuçlarının ve başlıkların altındaki snippet'lerin başlıklarını almaya çalışıyorum. Evet, sadece bunları kazımak için hangi elemanın aranacağını bilmiyorum. Google'ın java kullanarak kazımak için daha iyi bir yöntemi varsa, bilmek isterim.

Teşekkürler.

+0

Arama yapmak için girdiğiniz metni ve tüm arama sonuçlarının ana linklerini mi istiyorsunuz? – Collin

+0

Girmek için girdiğim metni aramak ve ana bağlantılara değil, arama sonuçlarının başlıklarını/gövdelerini çıkarmak için jsoup'u kullanıyorum. – user2405920

+1

Google tarafından izin verildiğine emin misiniz? – mael

cevap

11

İşte başlıyorsunuz. Ayrıca

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(); 
    } 
} 
} 

, ben krom kullanarak öneririm bu kendiniz yapmak. Sadece kazımak istediğin şeyi tıkla ve elementi kontrol et. Bu öğenin bulunduğu html'deki tam noktaya götürür. Bu durumda, önce tüm sonuç listelerinin kökünün nerede olduğunu bulmak istersiniz. Bunu bulduğunuzda, öğeyi belirtmek ve tercihen onu aramak için benzersiz bir özellik belirtmek istersiniz. Bu durumda kök öğesi her element için, sonra Bu, başlangıçtaki unsurlar diziye koymak istiyorum ne

<li class="g"> 

ile başlayan girişlerin bir demet göreceksiniz Bunun altında

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

olduğunu Başlığın ve vücudun nerede olduğunu bulmak isteyeceksiniz. Bu durumda, başlığı

öğesinin altında buldum. Böylece, her öğede bu öğeyi arayacaksınız. Aynı şey vücut için de geçerli. Vücudun altında bulunduğunu buldum. Bunu, .text() yöntemini kullanarak aradım ve o öğenin altındaki tüm metni döndürdüm. Anahtar, HER ZAMAN için öğeyi özgün bir öznitelikle bulmaya çalışmaktır (sınıf adı kullanmak idealdir). Eğer "div" gibi bir şeyi aramazsanız ve arama yaparsanız, sayfanın tamamını div içeren HER öğe olarak arar ve döndürür. Böylece, WAY'ı istediğinizden daha fazla sonuç alacaksınız. Umarım bunu açıklar. Başka sorularınız varsa lütfen bize bildirin.

+0

Cevabımı düzenledim, umarım bu mantıklıdır. Dediğim gibi krom kullanmayı önerebilirim. Bir web sitesiyle (HTML, CSS, ağ, komut dosyaları) herhangi bir şey yapmak için şaşırtıcıdır. Çok fazla bir şey. – Collin

+0

Crap, bir sebepten dolayı HTML'yi yazıya göndermeme izin vermeyeceğim. Düzenlemek için bana bir saniye verin EDIT: Tamam, şimdi aldım lol – Collin

+0

Teşekkürler, bu çok yardımcı olur. – user2405920

İlgili konular