2012-01-30 9 views
38

Chcę przetworzyć prostą stronę internetową i zeskrobać informacje z tej strony.Parse Web Site HTML z JAVA

Użyłem do parsowania plików XML z DocumentBuilderFactory, próbowałem zrobić to samo dla pliku html, ale zawsze dostaję się w nieskończoną pętlę.

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

Co to za problem? Czy istnieje jakiś łatwiejszy sposób na zeskanowanie danych ze strony internetowej dla danego znacznika HTML?

+0

Po pierwsze możesz użyć ciągu zamiast pliku. Gdzie wchodzi w nieskończoną pętlę? Być może ze względu na strumień wejściowy z adresu URL, który wydaje się nie mieć końca, masz ten problem. –

Odpowiedz

78

Jest o wiele łatwiejszy sposób na zrobienie tego. Proponuję użyć JSoup. Z JSoup można robić takie rzeczy jak

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

Albo jeśli chcesz ciała:

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

Lub jeśli chcesz, aby wszystkie linki:

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

nie jest już potrzebna, aby uzyskać połączenia lub obsługiwać strumienie. Prosty. Jeśli kiedykolwiek korzystałeś z jQuery, to jest bardzo podobne do tego.

+0

Po pierwsze, dziękuję! Ale czym jest # mp-itn b a? – CanCeylan

+1

# mp-itn to tylko kontener z 'id =" mp-itn "' –

+1

Zobacz moją edycję. Zrozumienie, w jaki sposób działają selektory css, naprawdę by Ci pomogło. –

19

Zdecydowanie JSoup jest odpowiedzią. ;-)