Hướng dẫn extract text from html java - trích xuất văn bản từ html java

Tôi đang làm việc trên một chương trình tải xuống các trang HTML và sau đó chọn một số thông tin và ghi nó vào một tệp khác.

Tôi muốn trích xuất thông tin giữa các thẻ đoạn văn, nhưng tôi chỉ có thể nhận được một dòng của đoạn văn. Mã của tôi như sau;

FileReader fileReader = new FileReader(file);
BufferedReader buffRd = new BufferedReader(fileReader);
BufferedWriter out = new BufferedWriter(new FileWriter(newFile.txt));
String s;

while ((s = br.readLine()) !=null) {
    if(s.contains("

")) { try { out.write(s); } catch (IOException e) { } } }

Tôi đã cố gắng thêm một vòng lặp khác, điều này sẽ cho chương trình tiếp tục viết để nộp cho đến khi dòng chứa thẻ

, bằng cách nói;

while ((s = br.readLine()) !=null) {
    if(s.contains("

")) { while(!s.contains("

") { try { out.write(s); } catch (IOException e) { } } } }

Nhưng điều này không hoạt động. Ai đó có thể vui lòng giúp đỡ.

Hướng dẫn extract text from html java - trích xuất văn bản từ html java

Bác sĩ Jones

20.8K12 Huy hiệu vàng75 Huy hiệu bạc98 Huy hiệu đồng12 gold badges75 silver badges98 bronze badges

Đã hỏi ngày 6 tháng 9 năm 2009 lúc 16:52Sep 6, 2009 at 16:52

3

JSOUP

Một trình phân tích cú pháp HTML khác mà tôi thực sự thích sử dụng là JSOUP. Bạn có thể nhận được tất cả các yếu tố

trong 2 dòng mã.

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements ps = doc.select("p");

Sau đó viết nó ra một tệp trong một dòng nữa

out.write(ps.text());  //it will append all of the p elements together in one long string

Hoặc nếu bạn muốn chúng trên các dòng riêng biệt, bạn có thể lặp lại thông qua các yếu tố và viết chúng ra riêng.

Hướng dẫn extract text from html java - trích xuất văn bản từ html java

Basil Bourque

Phim thương hiệu vàng 278K9292 gold badges786 silver badges1068 bronze badges

Đã trả lời ngày 23 tháng 4 năm 2012 lúc 14:04Apr 23, 2012 at 14:04

DannydannyDanny

7.2298 Huy hiệu vàng43 Huy hiệu bạc70 Huy hiệu đồng8 gold badges43 silver badges70 bronze badges

3

Jericho là một trong một số trình phân tích cú pháp HTML có thể làm cho nhiệm vụ này vừa dễ dàng vừa an toàn.

Đã trả lời ngày 6 tháng 9 năm 2009 lúc 17:02Sep 6, 2009 at 17:02

Gareth Davisgareth DavisGareth Davis

Phù vàng 27.4K12 Huy hiệu vàng73 Huy hiệu bạc105 Huy hiệu đồng12 gold badges73 silver badges105 bronze badges

JTIDY có thể đại diện cho một tài liệu HTML (thậm chí là một tài liệu bị dị dạng) dưới dạng mô hình tài liệu, làm cho quá trình trích xuất nội dung của thẻ

một quy trình khá thanh lịch hơn so với việc trục thủy thủ công qua văn bản thô.

Đã trả lời ngày 6 tháng 9 năm 2009 lúc 17:08Sep 6, 2009 at 17:08

Skaffmanskaffmanskaffman

394K96 Huy hiệu vàng808 Huy hiệu bạc765 Huy hiệu Đồng96 gold badges808 silver badges765 bronze badges

0

Hãy thử (nếu bạn không muốn sử dụng thư viện trình phân tích cú pháp HTML):


        FileReader fileReader = new FileReader(file);
        BufferedReader buffRd = new BufferedReader(fileReader);
        BufferedWriter out = new BufferedWriter(new FileWriter(newFile.txt));
        String s;
        int writeTo = 0;
        while ((s = br.readLine()) !=null) 
        {
                if(s.contains("

")) { writeTo = 1; try { out.write(s); } catch (IOException e) { } } if(s.contains("

")) { writeTo = 0; try { out.write(s); } catch (IOException e) { } } else if(writeTo==1) { try { out.write(s); } catch (IOException e) { } } }

Đã trả lời ngày 6 tháng 9 năm 2009 lúc 17:02Sep 6, 2009 at 17:02

Gareth Davisgareth DavisNiall

Phù vàng 27.4K12 Huy hiệu vàng73 Huy hiệu bạc105 Huy hiệu đồng3 gold badges9 silver badges17 bronze badges

2

JTIDY có thể đại diện cho một tài liệu HTML (thậm chí là một tài liệu bị dị dạng) dưới dạng mô hình tài liệu, làm cho quá trình trích xuất nội dung của thẻ

một quy trình khá thanh lịch hơn so với việc trục thủy thủ công qua văn bản thô.

import java.io.*;
import java.net.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class ParserCallbackTest extends HTMLEditorKit.ParserCallback
{
    private int tabLevel = 1;
    private int line = 1;

    public void handleComment(char[] data, int pos)
    {
        displayData(new String(data));
    }

    public void handleEndOfLineString(String eol)
    {
        System.out.println( line++ );
    }

    public void handleEndTag(HTML.Tag tag, int pos)
    {
        tabLevel--;
        displayData("/" + tag);
    }

    public void handleError(String errorMsg, int pos)
    {
        displayData(pos + ":" + errorMsg);
    }

    public void handleMutableTag(HTML.Tag tag, MutableAttributeSet a, int pos)
    {
        displayData("mutable:" + tag + ": " + pos + ": " + a);
    }

    public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet a, int pos)
    {
        displayData( tag + "::" + a );
//      tabLevel++;
    }

    public void handleStartTag(HTML.Tag tag, MutableAttributeSet a, int pos)
    {
        displayData( tag + ":" + a );
        tabLevel++;
    }

    public void handleText(char[] data, int pos)
    {
        displayData( new String(data) );
    }

    private void displayData(String text)
    {
        for (int i = 0; i < tabLevel; i++)
            System.out.print("\t");

        System.out.println(text);
    }

    public static void main(String[] args)
    throws IOException
    {
        ParserCallbackTest parser = new ParserCallbackTest();

        // args[0] is the file to parse

        Reader reader = new FileReader(args[0]);
//      URLConnection conn = new URL(args[0]).openConnection();
//      Reader reader = new InputStreamReader(conn.getInputStream());

        try
        {
            new ParserDelegator().parse(reader, parser, true);
        }
        catch (IOException e)
        {
            System.out.println(e);
        }
    }
}

Đã trả lời ngày 6 tháng 9 năm 2009 lúc 17:08

SkaffmanskaffmanSep 6, 2009 at 22:04

394K96 Huy hiệu vàng808 Huy hiệu bạc765 Huy hiệu Đồngcamickr

Hãy thử (nếu bạn không muốn sử dụng thư viện trình phân tích cú pháp HTML):19 gold badges160 silver badges283 bronze badges

Niallniall

 public static void main( String[] args )
{
    String url = "http://en.wikipedia.org/wiki/Big_data";

    Document document;
    try {
        document = Jsoup.connect(url).get();
        Elements paragraphs = document.select("p");

        Element firstParagraph = paragraphs.first();
        Element lastParagraph = paragraphs.last();
        Element p;
        int i=1;
        p=firstParagraph;
        System.out.println("*  " +p.text());
        while (p!=lastParagraph){
            p=paragraphs.get(i);
            System.out.println("*  " +p.text());
            i++;
        } 
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

7473 Huy hiệu vàng9 Huy hiệu bạc17 Huy hiệu đồngJun 20, 2013 at 5:33

1

Sử dụng parsercallback. Đó là một lớp đơn giản bao gồm với JDK. Nó thông báo cho bạn mỗi khi tìm thấy một thẻ mới và sau đó bạn có thể trích xuất văn bản của thẻ. Ví dụ đơn giản:

perl -ne "print if m|

| .. m|

|" infile.txt >outfile.txt

Vì vậy, tất cả những gì bạn cần làm là đặt cờ Boolean khi tìm thấy thẻ đoạn văn. Sau đó, trong phương thức handletext () bạn trích xuất văn bản.Sep 6, 2009 at 17:14

Đã trả lời ngày 6 tháng 9 năm 2009 lúc 22:04brianary

Camickrcamickr2 gold badges34 silver badges29 bronze badges

1