JAVA

[JAVA] JSoup 데이터 전처리와 저장

인생아 2024. 10. 28. 20:35
반응형

웹 크롤링을 통해 수집한 데이터를 관리하고 활용하기 위해서는 적절한 형식으로 저장하는 것이 중요합니다. CSV, JSON, XML 형식으로 저장하여 데이터의 재사용성을 높이고, 파일 I/O를 활용해 데이터를 효율적으로 관리할 수 있습니다. 이번 글에서는 JSoup로 파싱된 데이터를 다양한 포맷으로 저장하는 방법과 이를 통해 다른 프로그램과 연동하는 방법을 설명하겠습니다.

파싱된 데이터를 CSV, JSON, XML로 저장

1. CSV로 저장하기
CSV는 데이터를 행렬 형식으로 저장할 수 있어 간단한 데이터 관리에 유용합니다. Java에서 파싱한 데이터를 FileWriter를 통해 .csv 파일로 작성할 수 있습니다.

import java.io.FileWriter;
import java.io.IOException;

public class CsvExportExample {
    public static void main(String[] args) {
        try (FileWriter writer = new FileWriter("output.csv")) {
            writer.append("이름, 이메일, 전화번호\n"); // 헤더 작성
            writer.append("홍길동, hong@example.com, 010-1234-5678\n");
            writer.append("김철수, kim@example.com, 010-9876-5432\n");
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드는 output.csv 파일에 데이터를 저장하는 예제입니다. 행마다 데이터를 구분하여 쉽게 추가할 수 있으며, Excel과 같은 소프트웨어에서도 쉽게 불러와서 확인할 수 있습니다. 크롤링한 데이터를 Element에서 추출한 후, FileWriter를 사용해 CSV 형식으로 저장할 수 있습니다.

2. JSON으로 저장하기
JSON 형식은 키-값 쌍으로 이루어져 있어 구조화된 데이터를 저장하기에 적합합니다. JSON을 다루기 위해 Java에서는 org.json.JSONObject 라이브러리를 활용할 수 있습니다.

import org.json.JSONObject;
import java.io.FileWriter;
import java.io.IOException;

public class JsonExportExample {
    public static void main(String[] args) {
        JSONObject data = new JSONObject();
        data.put("name", "홍길동");
        data.put("email", "hong@example.com");
        data.put("phone", "010-1234-5678");

        try (FileWriter file = new FileWriter("output.json")) {
            file.write(data.toString(4)); // JSON을 예쁘게 출력 (4-space indent)
            file.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

JSON은 웹 API와의 연동에 매우 유용한 데이터 포맷입니다. 위 예제는 JSONObject를 사용하여 JSON 형식으로 데이터를 저장하는 방식이며, 들여쓰기된 출력 형식으로 저장할 수 있습니다. 웹에서 가져온 데이터는 JSON 포맷으로 저장하고 웹 애플리케이션과 쉽게 교환할 수 있어 편리합니다.

3. XML로 저장하기
XML은 데이터의 계층 구조를 표현하는 데 유리합니다. Java에서는 XML 작성을 위해 DocumentBuilder와 Transformer 클래스를 사용할 수 있습니다.

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;

public class XmlExportExample {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.newDocument();

            // Root Element
            Element rootElement = doc.createElement("contacts");
            doc.appendChild(rootElement);

            // Child Element
            Element contact = doc.createElement("contact");
            rootElement.appendChild(contact);

            Element name = doc.createElement("name");
            name.appendChild(doc.createTextNode("홍길동"));
            contact.appendChild(name);

            Element email = doc.createElement("email");
            email.appendChild(doc.createTextNode("hong@example.com"));
            contact.appendChild(email);

            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File("output.xml"));

            transformer.transform(source, result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

이 예제에서는 contacts 루트 요소와 하위 contact 요소를 만들어 XML 형식으로 데이터를 저장합니다. XML은 데이터 계층 구조를 표현하기 좋으며, 웹 서비스와의 데이터 교환이나 설정 파일 관리에 자주 사용됩니다.

반응형

파일 I/O 활용하여 데이터 관리하기

데이터를 파일로 저장할 때는 파일의 입출력 처리를 위해 FileWriter와 FileReader 또는 BufferedWriter와 BufferedReader를 사용할 수 있습니다. 파일 입출력을 통해 데이터를 저장하고 불러와 데이터를 분석할 수 있습니다.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileIOExample {
    public static void main(String[] args) {
        String fileName = "data.txt";
        
        // 파일 저장
        try (FileWriter writer = new FileWriter(fileName)) {
            writer.write("저장할 데이터 내용");
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        // 파일 읽기
        try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

이 코드에서는 data.txt 파일을 생성해 데이터를 저장하고 다시 읽어오는 방법을 보여줍니다. 파일 입출력을 통해 데이터의 지속성을 관리할 수 있습니다.

JSoup으로 만든 데이터를 다른 프로그램과 연동하기

JSoup로 수집한 데이터를 JSON, XML 형식으로 저장한 후 다른 프로그램과 연동할 수 있습니다. 예를 들어, 수집한 데이터를 JSON 포맷으로 저장하면 Python, JavaScript 등 다른 언어에서도 해당 데이터를 쉽게 불러와서 분석할 수 있습니다. 이때 JSON 포맷을 사용해 다양한 환경에서 데이터 활용성을 높이는 것이 중요합니다.

참고사이트

반응형