>  기사  >  Java  >  Java 크롤러 애플리케이션 튜토리얼, 실제 데이터 캡처 및 분석

Java 크롤러 애플리케이션 튜토리얼, 실제 데이터 캡처 및 분석

WBOY
WBOY원래의
2023-06-15 23:22:471574검색

Java 크롤러 애플리케이션 튜토리얼, 실용적인 데이터 캡처 및 분석

인터넷 시대의 도래와 함께 데이터는 기업과 개인이 성공할 수 있는 유일한 방법이 되었기 때문에 데이터의 중요성도 더욱 커지고 있습니다. 데이터 수집을 위한 강력한 도구로서 크롤러 기술은 사회 각계각층에서 널리 사용되어 왔습니다. 이 기사에서는 Java 언어를 사용하여 데이터를 캡처하고 분석하는 크롤러를 작성하는 방법을 소개합니다.

1. 전제 지식

Java 크롤러를 배우기 전에 다음 기본 지식을 숙지해야 합니다.

  1. Java 언어 기본: 최소한 Java의 클래스, 메소드, 변수 등과 같은 기본 개념을 이해해야 합니다. 객체 지향 프로그래밍 사상도 마찬가지입니다.
  2. HTML 기초: HTML 언어의 기본 구조와 태그를 이해하고 간단한 CSS 스타일과 JavaScript 코드를 사용할 수 있습니다.
  3. HTTP 기본: HTTP 프로토콜의 GET 및 POST 메서드의 기본 원칙을 이해하고 쿠키, 사용자 에이전트 등과 같은 HTTP 헤더 정보에 대해 어느 정도 이해합니다.
  4. 정규식: 정규식의 기본 구문과 사용법을 이해합니다.
  5. 데이터베이스 작업: JDBC, Hibernate, MyBatis 등과 같은 Java 데이터베이스 작업에 대한 기본 지식을 습득하세요.

2. Java 크롤러 기본

웹 크롤러는 인터넷에 액세스하고 웹 페이지에서 정보를 추출하고 처리하는 인간의 행동을 시뮬레이션할 수 있는 자동화된 프로그램입니다. Java 언어는 우수한 네트워크 프로그래밍 기능과 강력한 객체 지향 기능을 갖추고 있으므로 크롤러 프로그램을 작성하는 데 매우 적합합니다.

Java 크롤러는 일반적으로 URL 관리자, 웹 페이지 다운로더, 웹 페이지 파서의 세 부분으로 나뉩니다.

  1. URL 관리자

URL 관리자는 크롤러가 크롤링해야 하는 URL 주소를 관리하고 크롤링된 URL과 아직 크롤링해야 하는 URL을 기록합니다. 일반적으로 URL 관리자를 구현하는 방법에는 두 가지가 있습니다.

(1) 메모리 내 URL 관리자: 집합 또는 대기열을 사용하여 크롤링된 URL과 크롤링할 URL을 기록합니다.

(2) 데이터베이스 기반 URL 관리자: 크롤링된 URL과 크롤링할 URL을 데이터베이스에 저장합니다.

  1. 웹 페이지 다운로더

웹 페이지 다운로더는 크롤러의 핵심 부분이며 인터넷에서 웹 페이지를 다운로드하는 역할을 합니다. Java 크롤러에는 일반적으로 두 가지 구현 방법이 있습니다.

(1) URLConnection: 상대적으로 사용하기 쉬운 URLConnection 클래스를 사용하여 구현됩니다. 핵심 코드는 다음과 같습니다.

URL url = new URL("http://www.example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = reader.readLine();
while (line != null) {
    System.out.println(line);
    line = reader.readLine();
}

(2) HttpClient: HttpClient 프레임워크를 사용하여 구현됩니다. URLConnection보다 강력하며 쿠키 및 사용자 정의 User-Agent와 같은 HTTP 헤더 정보를 처리하기 위한 핵심 코드는 다음과 같습니다.

HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod("http://www.example.com");
int status = httpClient.executeMethod(getMethod);
if (status == HttpStatus.SC_OK) {
    InputStream in = getMethod.getResponseBodyAsStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String line = reader.readLine();
    while (line != null) {
        System.out.println(line);
        line = reader.readLine();
    }
}
  1. 웹 페이지 파서

웹 페이지를 다운로드한 후 데이터를 추출하는 웹페이지 파서. Java 크롤러에는 일반적으로 두 가지 구현 방법이 있습니다.

(1) 정규 표현식: 웹 페이지의 데이터를 일치시키기 위해 정규 표현식을 사용합니다. 핵심 코드는 다음과 같습니다.

String pattern = "<title>(.*?)</title>";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(html);
if (m.find()) {
    System.out.println(m.group(1));
}

(2) HTML 파서: 웹 프레임워크인 Jsoup 프레임워크를 사용하여 구현됩니다. 페이지는 DOM 구조로 변환한 후 CSS 선택기나 XPath와 유사한 방법을 통해 데이터를 얻을 수 있습니다. 핵심 코드는 다음과 같습니다.

Document doc = Jsoup.connect("http://www.example.com").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
    String text = link.text();
    String href = link.attr("href");
    System.out.println(text + " " + href);
}

3. Java 크롤러 실습

Java 크롤러의 기본 아이디어와 구현 방법을 이해한 후. , 웹사이트에서 데이터를 가져와 분석하는 간단한 크롤러 프로그램을 작성해 볼 수 있습니다.

  1. 데이터 크롤링

우리는 Douban 영화 순위 데이터를 크롤링하기로 결정했습니다. 먼저 아래와 같이 Douban 영화 순위의 URL 주소를 가져와야 합니다.

https://movie.douban.com/chart

그런 다음 Jsoup 프레임워크를 사용하여 웹 페이지를 다운로드하고 그 안의 데이터를 추출할 수 있습니다. 코드는 다음과 같습니다.

Document doc = Jsoup.connect("https://movie.douban.com/chart").get();
Elements items = doc.select("div.item");
List<Movie> movieList = new ArrayList<>();
for (Element item : items) {
    Elements title = item.select("div.info div.hd a");
    Elements rating = item.select("div.info div.bd div.star span.rating_num");
    Elements director = item.select("div.info div.bd p").eq(0);
    Elements actor = item.select("div.info div.bd p").eq(1);
    Movie movie = new Movie();
    movie.setTitle(title.text());
    movie.setRating(Double.valueOf(rating.text()));
    movie.setDirector(director.text().replace("导演: ", ""));
    movie.setActor(actor.text().replace("主演: ", ""));
    movieList.add(movie);
}

여기서는 영화 정보를 저장하기 위해 Movie 클래스를 사용합니다.

  1. 저장 데이터

획득한 영화 데이터를 데이터베이스에 저장하여 후속 분석을 용이하게 합니다. 여기서는 JDBC를 사용하여 데이터베이스를 운영하며 코드는 다음과 같습니다.

public class DBHelper {
    private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DB_URL = "jdbc:mysql://localhost:3306/db";
    private static final String USER = "root";
    private static final String PASS = "password";

    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void saveMovies(List<Movie> movieList) {
        try (Connection conn = getConnection();
             PreparedStatement stmt = conn.prepareStatement(
                     "INSERT INTO movie(title,rating,director,actor) VALUES (?,?,?,?)"
             )) {
            for (Movie movie : movieList) {
                stmt.setString(1, movie.getTitle());
                stmt.setDouble(2, movie.getRating());
                stmt.setString(3, movie.getDirector());
                stmt.setString(4, movie.getActor());
                stmt.addBatch();
            }
            stmt.executeBatch();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 데이터 분석

데이터가 확보된 후 여기에서 영화 수와 각 감독의 평균 평점을 계산할 수 있습니다. 코드는 다음과 같습니다.

public class MovieAnalyzer {
    public static void analyzeMovies() {
        try (Connection conn = DBHelper.getConnection();
             Statement stmt = conn.createStatement()) {
            String sql = "SELECT director, COUNT(*) AS cnt, AVG(rating) AS avg_rating " +
                    "FROM movie " +
                    "GROUP BY director " +
                    "HAVING cnt > 1 " +
                    "ORDER BY avg_rating DESC";
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                String director = rs.getString("director");
                int cnt = rs.getInt("cnt");
                double avgRating = rs.getDouble("avg_rating");
                System.out.printf("%-20s %5d %7.2f%n", director, cnt, avgRating);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

획득한 영화 정보를 데이터베이스에 저장하고 분석하여 Java 크롤러의 실제 적용을 완료했습니다.

4. 요약

이 기사에서는 독자가 크롤러 기술과 Java 프로그래밍을 더 잘 이해할 수 있도록 Java 크롤러의 기본 지식과 실제 응용 프로그램을 소개합니다. 실제로는 법적, 윤리적 규범에 주의를 기울이고 타인의 사생활을 불법적으로 취득하거나 저작권을 침해하는 행위를 삼가해야 합니다. 동시에 크롤링된 웹사이트에 의해 차단되거나 IP가 금지되는 것을 방지하려면 크롤링 방지 기술도 숙지해야 합니다.

위 내용은 Java 크롤러 애플리케이션 튜토리얼, 실제 데이터 캡처 및 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.