2013-07-17 130 views
6

我正在嘗試使用JSoup來搜索谷歌的搜索結果。目前這是我的代碼。使用JSoup刮取谷歌搜索結果

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

} 

我只是想獲得搜索結果的標題和標題下的代碼片段。所以,是的,我只是不知道尋找什麼元素來刮這些東西。如果有人有更好的方法來刮谷歌使用Java我很想知道。

謝謝。

+0

所以你想讓你輸入的文本搜索和所有搜索結果的主要鏈接? – Collin

+0

我想要我輸入的文本進行搜索,然後使用jsoup來提取搜索結果的標題/正文,而不是主要鏈接。 – user2405920

+1

您確定Google允許它嗎? – mael

回答

11

在這裏,你去。

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

此外,要自己做到這一點,我會建議使用鉻。你只要右鍵點擊你想要的任何東西,然後去檢查元素。它會帶你到那個元素所在的html中的確切位置。在這種情況下,您首先需要找出所有結果列表的根目錄。當你發現這一點時,你想指定元素,最好是一個唯一的屬性來搜索它。在這種情況下,根元素是

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

下面你會看到一堆與

<li class="g"> 

開始上市。這是你想要投入你的初始元素數組是什麼,然後爲每個元素你會想找到標題和正文所在的位置。在這種情況下,我發現標題爲

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

元素。因此,您將在每個列表中搜索該元素。身體也是如此。我發現身體下,所以我使用.text()方法搜索,並返回該元素下的所有文本。關鍵是總是嘗試找到具有原始屬性的元素(使用類名稱是理想的)。如果你不這樣做並且只搜索諸如「div」之類的東西,它將搜索整個頁面以獲取包含div的ANY元素並返回該元素。所以你會得到更多的結果比你想要的。我希望這解釋得很好。如果您還有其他問題,請告訴我。

+0

編輯我的答案,我希望這是有道理的。就像我說的我會建議使用chrome。使用網站(HTML,CSS,網絡,腳本)做任何事情都很棒。幾乎任何東西。 – Collin

+0

廢話,出於某種原因,它不會讓我發佈文本中的HTML。給我一秒重新編輯它編輯:好的,現在得到它大聲笑 – Collin

+0

謝謝,這有助於很多。 – user2405920