20.06.22 자바로 웹 크롤
python :beautifulsoup4, selenium
java : jsoup, selenium
프로젝트 생성
파이썬 < - 뷰티풀숩이랑 셀레니움 필요한데 < -아나콘다 (패키지 매니저)
씨드라이브에 빅데이터에 새폴더 (생성라이브러리)해서 넣어줌
자바 - 오라클 연동 -> OJBC라이브러리가있는데 메이븐이안돼서 오리지널 방법도 알아야함
static 붙이는 이유는
static String base = "https://finance.naver.com/item/frgn.nhn?code=005930&page=1";
try~ catch ~ finally -> 예외 처리
처리하는 애가 직접 하는거임
선반에서 컵을 꺼낸다던지 객체에 있는 메서드 자체가
throws ~~ -> 예외 던짐
물이없는데?하고
예외를 직접 처리하지않고 나를 호출한사람한테
계속 호출한녀석한테 앞으로 감 최종적으로 main까지 간다.
예외처리하지않고 에러띄우는거
>>>>>> 처리하는 주체가 달라짐.
코드를 짜면 둘 다 섞어쓴다.
main이 알아야하는 예외가있어서
throws를 해서 팀장이 알아야하기때문에.이런 케이스도 있음
태그명
하나의 셀을 td라고 함 td들이 모이면 td를 싸는 전체 한줄을 tr이라고 함.
tr은 테이블로우의 약자 가로줄
제목열을 thead
내용열을 tbody 제목열이 필요없으니까 tbody만 긁은거
Elements line = doc.select("table.type2 > tbody > tr");
Elements line = doc.select("table.type2 > tbody > tr");
돔트리
table - thead - tr
-tbody -
크롤링은 마니 해보는게 실력이 는다.
td가 똑같이 여러개 있을 때 리스트로 해서 선택자도 다똑같을때 td를 인덱스 번호로 긁어오자
결측치 N/A 누락된 값
이런거 처리를 해줘야함 안해주면 error가 남
0으로 넣던가 전체의 평균을 넣어줌 << 전체평균은 통계쪽에서
// size가 2개 있으면, 0 , 1번지수가 일때만 bookrate에 넣어라!
if (movie.select("span.num").size() == 2 ) {
String bookRate = movie.select("span.num").get(1).text();
} else {
String bookRate = "0";
}
애초에 변수 선언할 때 bookRate 에 "0";을 넣어주면
else문을 따로 적어 주지않아도 되는 효율적인 코드가 생긴다.
substring
= 부터 짜르면 안되니까 +1해준거임
끝에 종료하믄 값이 없으니까 그냥 끝까지 코드만 긁어와 진거임
String naverHref = movie.select("dt.tit > a").attr("href"); // 네이버 영화 url
naverCode = naverHref.substring(naverHref.lastIndexOf("=")+1); // 네이버 영화 코드