2012-01-30 94 views
38

我想解析一個簡單的網站並從該網站上抓取信息。用JAVA解析網站HTML

我曾經用DocumentBuilderFactory解析XML文件,我試圖爲html文件做同樣的事情,但它總是進入無限循環。

URL url = new URL("http://www.deneme.com"); 
    URLConnection uc = url.openConnection(); 

    InputStreamReader input = new InputStreamReader(uc.getInputStream()); 
    BufferedReader in = new BufferedReader(input); 
    String inputLine; 

    FileWriter outFile = new FileWriter("orhancan"); 
    PrintWriter out = new PrintWriter(outFile); 

    while ((inputLine = in.readLine()) != null) { 
     out.println(inputLine); 
    } 

    in.close(); 
    out.close(); 

    File fXmlFile = new File("orhancan"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(fXmlFile); 


    NodeList prelist = doc.getElementsByTagName("body"); 
    System.out.println(prelist.getLength()); 

這是什麼問題?或者是否有更簡單的方法從一個給定的HTML標籤從網站上刮取數據?

+0

首先,您可以使用字符串而不是文件。它在哪裏進入無限循環?也許是因爲來自url的輸入流,這似乎並沒有結束你有這個問題。 – 2012-01-30 22:19:56

回答

78

有一個更簡單的方法來做到這一點。我建議使用JSoup。隨着JSoup你可以做這樣的事情

Document doc = Jsoup.connect("http://en.wikipedia.org/").get(); 
Elements newsHeadlines = doc.select("#mp-itn b a"); 

或者,如果你想身體:

Elements body = doc.select("body"); 

或者,如果你想要的所有鏈接:

Elements links = doc.select("body a"); 

您不再需要得到連接或處理流。簡單。如果你曾經使用jQuery,那麼它非常相似。

+0

首先,謝謝!但是,#mp-itn b a是什麼? – CanCeylan 2012-01-30 22:17:37

+1

#mp-itn只是一個包含'id =「mp-itn」' – 2012-01-30 22:18:23

+1

的容器請參閱我的編輯。理解css選擇器的工作方式對你真的很有幫助。 – 2012-01-30 22:19:35

19

絕對JSoup就是答案。 ;-)