일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바 예외
- 페이지분석
- 숫자형식오류
- 숫자 형식
- 배열 3요소
- 우아한테크
- R1C3
- 웹 브라우저 전쟁
- 생성자
- 크롤링 오류
- 함수 선언
- 자바
- 배열 예제
- 크롤링
- DoIt
- SQL입문
- html
- DoitSQL
- 키-값 데이터베이스
- dbms
- 데이터베이스
- 예외
- 자바 오류
- Doit입문SQL
- 예제
- 함수
- DoitSQL입문
- SQL
- 웹브라우저 수용도
- HTML역사
- Today
- Total
프로그래밍
[자바 기초] day20 : 자바로 크롤링 본문
2023.05.31.수
웹 크롤링
웹 상의 코드를 분석하여 데이터를 가공하고 문서화하는 것을 말한다
스크랩핑
인터넷상에 존재하는 데이터를
프로그램을 이용하여 자동화된 방법으로
수집하는 작업
유효한 정보로 '가공'
: 크롤링
: 수집한 데티터들을 분류하여 별도로 저장하는 작업
파싱
유효한 정보로 '가공'하는 작업
데이터를 이용할 형식에 맞게 추출하여
의미있는 값으로 변형하는 작업
웹크롤링
우리가 웹 브라우저로 보는 화면을 웹페이지라고 부른다
코드를 작성한 페이지를 브라우저로 출력한 결과이기 때문에
여태까지 다루었던 자바 이클립스의 console과 같다
(아이콘, 마우스를 활용하므로 GUI이다)
HTML
- 대소문자를 구분하지 않는다
- 마크업언어 즉, 태그 언어이다
- 요소(element)들로 이루어졌다
<!DOCTYPE HTML>
이 문서는 html 문서라고 명시하는 태그이다
alt 속성(property)
스크린리더가 읽는 속성으로 웹 표준 접근성 지침을 준수하도록 하는 속성이다
남녀노소 모두가 차별없이 웹페이지를 잘 이용할 수 있게 코더는 페이지를 작성하여 제공해야 한다
※ alt를 사용하지 않아도 페이지 구성 자체에는 문제가 없으나 스크린리더와 같은 보조기구를 활용하는 사람들에게는 제공 자체가 되지 않는다
CSS
코드를 작성해두면 페이지의 스타일에 변화를 줄 수 있는 언어
웹의 요청 흐름
- 사용자(Client, 브라우저)가 버튼을 통해 요청(request)을 한다
- 해당 요청은 URL에 표시되어 전송된다
- 서버는 요청이 무엇인지 확인하여 사용자에게 응답할 준비를 함
- 받은 데이터 화면에 응답(response)한다
URL 요청 예)
https://comic.naver.com/webtoon/list?titleId=799267
프로토콜://서버(도메인)/위치/위치?변수명=값&변수명=값&변수명=값&변수명=값&......
00서버 XX위치에서 요청
에러 예)
400대 에러
클라이언트 에러(사용자 특이 에러)
ex) 404 없거나 권한이 없음
> try catch문을 이용하여 처리
500대 에러
서버 에러
500 코드 예외가 발생한 경우
Null Point Exception 오류가 대부분을 차지한다 80%
Jsoup 라이브러리
자바에서 크롤링을 할 때는 주로 Jsoup 라이브러리를 사용한다
다운 링크
위의 링크에서 다운 받은 뒤
해당 자바 프로젝트 선택 후
Properties
Java Build Path > Libraries > ClassPath > Add External JARs
다운 받은 jar 파일 선택 후 적용한다
적용된 모습
크롤링 예제
package class01;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
// 웹 크롤링
public class Test01 {
public static void main(String[] args) {
// 웹 페이지 url 링크
final String url = "http://www.cgv.co.kr/movies/?lt=1&ft=0";
// 1. 웹페이지 코드를자바로 가져오기
// a) 해당 url의 페이지 코드를 받아오기 위해, 연결통로(스트림)를 open
// connect() 해야함
// b) connect()가 정상적으로 수행되었다면 get()을 통하여
// 해당 페이지의 코드를 받아옴
Connection conn = Jsoup.connect(url);
Document doc = null;
try {
doc = conn.get();
} catch (IOException e) {
e.printStackTrace();
}
// 2. 페이지 스크랩핑 완료
// 스캐너나 랜덤 어레이리스트 등은 자바에서 제공하는 클래스지만
// 자바에서 기본 제공하지 않는 클래스
// 3. 페이지를 분석
// a) DOM 문서 분석
// <></>태그(요소,element)단위로 분석
// 속성을 가질 수있으며
// 분석할때에 가장 대표적으로 활용되는 속성이
// id(유일한 요소), class(여러개의 공통점을 가진 요소들)
Elements elems = doc.select("strong.title"); // 영화 제목
Elements elems2 = doc.select("strong.percent> span"); //영화 예매율
// 영화 제목, 예매율 배열리스트에 선언
ArrayList<String> title =new ArrayList<String>();
ArrayList<String> rate =new ArrayList<String>();
// 태그명#id명
// 태그명.clss명
// 상위 태그명>하위태그명
// --->파싱
// 4. 분석하여 추출 완료한 데이터를 콘솔화면에 출력
// Iterator 이터레이터
// : 거대한 컬렉션(elems)에 있는 데이터를 작은 단위의 컬렉션(elem)으로 나눠저장할수있도록 해주는 컬렉션
Iterator<Element> itr = elems.iterator();
Iterator<Element> itr2 = elems2.iterator();
// itr는 hasNext(),next()
// 다음 요소가 있어?,그럼 다음거보여줘~
while (itr.hasNext()) {
String str = itr.next().toString();
// 5. 데이터를 가공
int index = str.indexOf(">");
str=str.substring(index+1);
index = str.indexOf("<");
str=str.substring(0,index);
title.add(str); //제목 배열리스트에 저장
}
while (itr2.hasNext()) {
String str2 = itr2.next().toString();
// 5. 데이터를 가공
int index = str2.indexOf(">");
str2=str2.substring(index+1);
index = str2.indexOf("<");
str2=str2.substring(0,index);
rate.add(str2); // 예매율 배열리스트에 저장
}
// 처음부터 끝까지 목록 출력
for(int i = 0; i<title.size(); i++) {
System.out.println();
System.out.print(title.get(i)+"\n");
System.out.println("예매율: " +rate.get(i));
System.out.println();
}
}
}
'자바 > 자바 기초' 카테고리의 다른 글
[자바 기초] new 객체 생성과 주소값 (0) | 2023.06.02 |
---|---|
[자바 기초] day19 : MVC 패턴 심화(회원관리) (1) | 2023.05.30 |
[자바 기초] day17 : MVC 패턴(VO 두개 이상) (0) | 2023.05.30 |
[자바 기초] day16 : MVC 패턴(오버라이딩) (0) | 2023.05.30 |
[자바 기초] day15 : MVC 예제(학생부 프로그램) (0) | 2023.05.23 |