일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 성적프로그램
- rownum
- 부트스트랩
- JSP
- 답변형 게시판
- alias
- Bootstrap
- SQL
- HTML
- tomcat
- ||
- Oracle SQL
- group by
- Java
- 과정평가형
- HTTP Status 404
- 제약조건
- github
- CRUD
- Oracle DB
- HTTP Status 500
- JavaScript
- jQuery
- git
- 이클립스
- sql developer
- 한글 인코딩
- oracle
- 모조칼럼
- distinct
초급의 끄적거림
[크롤링] Crawling (크롤링) / robots.txt 본문
1. 주의해야할 점
: 저작권 문제에서 자유롭지 않음 → 신문기사, 책, 논문, 사진 등의 자료들은 저작권에 특별히 주의
+) URL과 프런트단이 분석이 잘 되어야 써먹을 수가 있음
: URL과 가져오려는 내용이 들어있는 태그를 지정해서 가져오는 것이 중요
2. 로봇 배제 표준(robots.txt)
- 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 규약
- 크롤링(Crawling), 스크래핑(Scraping) : 웹페이지의 내용을 가져 오는 것
- 로봇이 수집을 못하게 막을 목적으로 로봇의 접근 관련 내용(크롤링 허가/불허의 여부)을 robots.txt에 적어두는 내용
- 강제성과 의무사항은 없으나 공지를 해놓았으니 법적으로 문제되지 않도록 주의할것
- 업로드 위치 : /WEB-INF/robots.txt
- 모든 로봇에게 문서 접근 허락
User-agent: *
Allow: /
- 모든 로봇을 차단
User-agent: * # 모든 로봇(robot)들에 적용합니다
Disallow: / # 모든 페이지들의 색인(indexing)을 금지합니다
3. jsoup 라이브러리 다운로드
- Jsoup 자체가 HTTP Connection 을 기반으로 만들어졌기 때문에
단독 라이브러리로도 웹 크롤링이 충분히 가능 합니다.
- 다운로드
https://jsoup.org/download -> jsoup-1.11.3.jar
① Java Project 추가
기본 Java Project -> 수동 Build Path를 통해 Jar를 등록
② Dynamic Web Project 추가
해당 프로젝트 -> /WebContent/WEB-INF/lib/jsoup-1.11.3.jar 복사
③ 스프링프로젝트 Maven 에서 추가
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.2</version>
</dependency>
Jsoup 자체가 HTTP Connection을 기반으로 민들어졌기 때문에 단독 라이브러리로 웹크롤링이 충분히 가능
다운로드 : https://jsoup.org/download
다운로드 받은 Jsoup의 .jar 를 라이브러리로 넣어줌
4. 핵심 클래스
- Document 클래스 : 연결해서 얻어온 HTML전체 문서
- Element 클래스 : Document의 HTML요소
- Elements 클래스 : Element가 모인 자료형
package net.carwling;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Test01_myweb {
public static void main(String[] args) {
// myweb 프로젝트 게시판 크롤링하기
try{
//1) URL 선언
//URL을 정확히 넣어줘야 함
String URL = "http://172.16.83.13:8090/myweb/index.jsp";
//2) index.jsp의 HTML 문서 내용 가져오기
//→ 웹브라우저의 페이지 소스보기와 동일
Document doc=Jsoup.connect(URL).get();
//3) 가져온 2)의 내용 (doc)을 출력하기
//모든 내용이 다 나옴 System.out.println(doc.toString());
System.out.println(doc.text()); //myweb의 텍스트
System.out.println("---------------------");
System.out.println(doc.title()); //myweb의 타이틀
System.out.println("---------------------");
System.out.println(doc.body()); //myweb의 body 부분
}catch(Exception e){
System.out.println("크롤링 실패 : "+e);
}//try end
}//main() end
}//class end
프론트단을 보고 어느정도 이해를 해야 크롤링해올 수가 있음
- 원하는 글이 들어가 있는 class를 확인하고 가져오기
package net.carwling;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Test02_soldesk {
public static void main(String[] args) {
// soldesk.com 공지사항 제목 크롤링 하기
try{
String URL = "http://soldesk.com/board/board_bagic/board_list.asp?";
//공지사항이 총 3페이지가 존재하기 때문에 페이징이 들어가 있는 URL부터 반복을 돌림
for(int page=1; page<=3; page++){
String params="scrID=0000000173&pageNum=9&subNum=1&ssubNum=1";
params +="&page="+page;
params +="&bd_num=&act=list&s_string=";
Document doc=Jsoup.connect(URL+params).get();
//System.out.println(doc.toString());
//공지사항 제목에 <td class="td_left"> 적용된 요소만 가져오기
Elements elements=doc.select(".td_left");
for(Element element : elements){
System.out.println(element.text());
}//for end
}//for end
}catch(Exception e){
System.out.println("크롤링 실패 : "+e);
}//try end
}//main() end
}//class end
네이버 영화 평점 크롤링 연습
- 네이버 평점 부분에서 F12 를 이용하여 개발자 모드로 평점부분을 지정하여 url에 복사붙여넣기 하면 나타나는 모습
package net.carwling;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Test03_navermovie {
public static void main(String[] args) {
// 네이버 영화 평점
try{
String URL="https://movie.naver.com/movie/bi/mi/point.nhn?";
String params="code=167605&type=after&isActualPointWriteExecute=false&isMileageSubscriptionAlready=false&isMileageSubscriptionReject=false&page=";
int PAGE=1;
for(PAGE=1; PAGE<=10; PAGE++){
Document doc=Jsoup.connect(URL+params+PAGE).get();
System.out.println(doc.toString());
}//for end
}catch(Exception e){
System.out.println("크롤링 실패 : "+e);
}//try end
}//main() end
}//class end
- 네이버 평점의 내용이 들어가있는 것이 score_reple 클래스의 p 태그
: .score_reple p 라고 특정지어서 text를 불러오게 함
package net.carwling;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Test03_navermovie {
public static void main(String[] args) {
// 네이버 영화 평점
try{
String URL="https://movie.naver.com/movie/bi/mi/pointWriteFormList.nhn?";
String params="code=167605&type=after&isActualPointWriteExecute=false&isMileageSubscriptionAlready=false&isMileageSubscriptionReject=false&page=";
int PAGE=1;
for(PAGE=1; PAGE<=10; PAGE++){
Document doc=Jsoup.connect(URL+params+PAGE).get();
//System.out.println(doc.toString());
Elements elements=doc.select(".score_reple p"); //p태그로 시작하기 때문에 스페이스바 + p
for(Element element : elements){
System.out.println(element.text());
}
}//for end
}catch(Exception e){
System.out.println("크롤링 실패 : "+e);
}//try end
}//main() end
}//class end
'기타' 카테고리의 다른 글
[오피스] 오피스2016 한국어 설치 (0) | 2020.01.27 |
---|---|
[Unix/Linux] 기본 내용 (0) | 2019.12.06 |
[Summernote] Summernote (썸머노트) 사용법 (2) | 2019.11.07 |
[Tistory] 코드블럭 꾸미기, 라인넘버 표시 (0) | 2019.10.24 |
디버깅 (Debug) (0) | 2019.10.01 |