2012-01-30 41 views
38

Tôi muốn phân tích một trang web đơn giản và xóa thông tin khỏi trang web đó.HTML trang web của Parse với JAVA

Tôi đã sử dụng để phân tích các tệp XML bằng DocumentBuilderFactory, tôi đã cố gắng làm điều tương tự cho tệp html nhưng nó luôn đi vào vòng lặp vô hạn.

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

Có vấn đề gì? Hoặc có cách nào dễ dàng hơn để lấy dữ liệu từ một trang web cho một thẻ html đã cho không?

+0

Trước tiên, bạn có thể sử dụng Chuỗi thay vì Tệp. Nó đi vào đâu trong một vòng lặp vô hạn? Có lẽ vì luồng đầu vào từ url mà dường như không kết thúc bạn có vấn đề đó. –

Trả lời

78

Có một cách dễ dàng hơn để thực hiện việc này. Tôi khuyên bạn nên sử dụng JSoup. Với JSoup bạn có thể làm những việc như

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

Hoặc nếu bạn muốn cơ thể:

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

Hoặc nếu bạn muốn tất cả các liên kết:

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

Bạn không còn cần phải nhận được kết nối hoặc xử lý luồng. Đơn giản. Nếu bạn đã từng sử dụng jQuery thì nó rất giống với jQuery.

+0

Đầu tiên, cảm ơn bạn! Nhưng # mp-itn b a là gì? – CanCeylan

+1

# mp-itn chỉ là một vùng chứa có 'id =" mp-itn "' –

+1

Xem phần chỉnh sửa của tôi. Hiểu được cách bộ chọn css hoạt động sẽ thực sự giúp bạn như thế nào. –

5

HTML không phải lúc nào cũng hợp lệ, định dạng XML. Hãy thử một trình phân tích cú pháp HTML đặc biệt thay vì một trình phân tích cú pháp XML. Có một vài người khác nhau có sẵn:

http://java-source.net/open-source/html-parsers

19

Chắc chắn JSoup là câu trả lời. ;-)

Các vấn đề liên quan