2012-09-27 35 views
3

美好的一天,我是Java的新手,我試圖從互聯網上捕捉一些數據。如果我想舉一個例子搜索谷歌並存儲結果數量和搜索時間。 我想過使用jsoup DOM功能,但我無法弄清楚如何獲取特定元素的值。在Java中從互聯網中獲取數據

如果我使用谷歌瀏覽器檢查元素我很感興趣,該位爲

<div id="resultStats"> 
About 6,480,000,000 results 
<nobr> (0.26 seconds)&nbsp;</nobr> 
</div>  

那是我唯一可以開始工作,但文檔不包括該元素。

import org.jsoup.nodes.Document; 


import java.io.IOException; 

public class google_time { 
    public static void main(String[] args) throws IOException { 
     String url = "https://www.google.com/webhp?hl=en&tab=Tw&q=data#hl=en&newwindow=1&output=search&sclient=psy-ab&q=data&oq=data&gs_l=hp.12...0.0.0.1682.0.0.0.0.0.0.0.0..0.0.les%3B..0.0...1c.Q9UUbwkFy-I&pbx=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&fp=6a12f0870d3ff179&biw=1066&bih=483"; 

     Document doc = Jsoup.connect(url).get(); 
     System.out.println(doc); 

    } 
} 

那麼如何我只得到該位resultStatic,並在那裏的文本?

+1

jsoup提供您可以導航的DOM(文檔對象模型),嘗試閱讀[示例](http://jsoup.org/cookbook/extracting-data/dom-navigation) – MadProgrammer

+0

也可以查看[this] (https://norrisshelton.wordpress.com/2011/01/27/jsoup-java-html-parser/),特別是關於'jquery'和[例子]的部分(http://jsoup.org/cookboo k/extract-data/selector-syntax) – MadProgrammer

回答

1

第一問題:

貌似網址https://www.google.com/webhp用於谷歌搜索頁面的動態渲染。即使用AJAX獲取搜索結果,然後使用JavaScript將其呈現在頁面中。由於jsoup不是瀏覽器,並且不運行JavaScript,因此使用jsoup獲得的html將不會有任何搜索結果。我們可以使用https://www.google.com/search。這將呈現一個正常的html頁面,結果沒有任何AJAX hooplah。但是從非瀏覽器源谷歌仍然塊的請求,所以你不得不UserAgent頭添加到您的Jsoup的要求是這樣的:

Jsoup.connect(url) 
    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1;"+ 
     " en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") 
    .get(); 

而且最終的代碼會是這個樣子:

import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 
import org.jsoup.nodes.Element; 
import org.jsoup.Jsoup; 
import java.util.Iterator; 
import java.io.IOException; 

public class GoogleScraper { 
    public static void main(String[] args) throws IOException { 
     String url = "https://www.google.com/search?"+ 
     "hl=en&tab=Tw&q=data#hl=en&newwindow=1&"+ 
     "output=search&sclient=psy-ab&q=data&oq=data"+ 
     "&gs_l=hp.12...0.0.0.1682.0.0.0.0.0.0.0.0..0.0.les"+ 
     "%3B..0.0...1c.Q9UUbwkFy-I&pbx=1&bav=on.2,"+ 
     "or.r_gc.r_pw.r_cp.r_qf.&fp=6a12f0870d3ff179&biw=1066&bih=483"; 

     try{ 

      Document doc = Jsoup.connect(url) 
      .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1;"+ 
       " en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") 
      .get(); 

      //Prints the whole markup 
      //System.out.println(doc.toString()); 

      Elements resultDivElems = doc.select("div#resultStats"); 
      Iterator<Element> itr = resultDivElems.iterator(); 

      //Prints only what you need, ie the result details 
      while(itr.hasNext()){ 
       System.out.println(((Element)itr.next()).text()); 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 
+0

謝謝,但是這並沒有工作,你也必須使用Elements not Element,但仍然沒有成功 – Michele87

+0

抱歉,更新了答案。看一看。 –