윤리
어떤 웹 사이트는 크롤링을 하면 안된다. 특정 시간 내에 너무 많은 크롤링을 하면 해당 사이트에서 접속을 차단할 수도 있다. 좋은 목적으로 써야함(해커 입장이 아닌...),
웹 크롤링을 활용해서 돈 벌기 : http://www.entropywebscraping.com/2017/01/01/big-list-web-scraping-uses/
함정은 단순히 크롤링을 해서 돈을 자동으로 벌지는 못한다는 점이다. 명확한 목표가 있어야하고 이런 저런 데이터를 긁어 모은 뒤 돈이 되게 해주는 데이터 과학자 등의 고급 인력이 필요할 수도 있다...
jsoup
HTML 기반의 내용물에 쓰이는 자바 기반의 라이브러리다.
데이터를 추출하고 다룰 수 있도록 매우 편리한 API를 제공한다.
기능 : CSS selector, DOM 다루기, 유효하지 않은 데이터 다루기.
DOM은 document object model의 약자다. HTML, XML을 처리하는 API다. 문서의 구조화를 해줘서 태그의 부모 자식 관계를 만들어준다.
jsoup 설치
https://jsoup.org/ 에 접속해서 download 탭을 클릭하고 jsoup-x.xx.x.jar core library를 다운로드한다.
이클립스에서 환경 설정
이클립스 켠다. 없다면 설치...
File->New->Java Project->project 이름 설정하고 프로젝트 생성.
해당 프로젝트에 마우스 커서 갖다 놓고 우클릭. Properties 클릭
노랗게 표시한 것 처럼 Java Build Path 클릭 -> Add External JARs 클릭 -> 아까 다운로드 한 jsoup.jar 파일 클릭.
프로젝트에 마우스 커서 갖다놓고 우클릭 -> New -> Class 클릭 해서 java 파일 생성
다음은 코드 설명
crawler.java 파일
package crawler;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class crawler {
public static void main(String[] args) {
// TODO Auto-generated method stub
String html="<html><head><title>Sample Title</title></head>"
+"<body><p>Sample Content</p></body></html>";
Document document = Jsoup.parse(html); //html이라는 문자열을 해석
System.out.println("==========<head>==========\n"+document.head());//head 태그 포함해서 출력
System.out.println("==========<body>==========\n"+document.body());//body 태그 포함해서 출력
System.out.println("==========<title>==========\n"+document.title());//title 태그 안의 내용물 출력, 왜 title 태그는 안나오지?
System.out.println("==========<body>==========\n"+document.getElementsByTag("body"));//body태그를 포함한 모든 태그와 내용물 출력
Elements paragraphs = document.getElementsByTag("p");
for(Element paragraph : paragraphs){
System.out.println("==========<p>==========\n"+paragraph.text());//태그를 제외한 태그 안의 내용물만 출력
}
}
}
package crawler;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class selectandattr {
public static void main(String[] args)throws IOException {
//주택의 주소와 가격 뽑기
String url="https://www.zillow.com/homes/for_sale/Denver-CO/pmf,pf_pt/118576962_zpid/11093_rid/globalrelevanceex_sort/39.976331,-104.6101,39.554089,-105.104485_rect/10_zm/";
Document document = Jsoup.connect(url).get();//url 해석하기
Elements parents = document.getElementsByClass("zsg-photo-card-spec");//원하는 내용의 부모 클래스
for(Element paragraph: parents) { //부모 클래스 안에 있는 address, price 클래스 출력
System.out.println(paragraph.getElementsByClass("zsg-photo-card-address").text()+ ' '+paragraph.getElementsByClass("zsg-photo-card-price").text());
}
}
}
navernews.java 파일
package crawler;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
import org.jsoup.nodes.*;
import org.jsoup.select.Elements;
public class navernews {
public static void main(String[] args)throws IOException {
String url="http://news.naver.com/";
Document document = Jsoup.connect(url).get(); //네이버 뉴스 url 해석.
//이 시각 주요 뉴스의 헤드라인 뽑기
Elements strong = document.getElementsByClass("newsnow_tx_inner"); //뽑고자 하는 내용의 부모 class.
for(Element st : strong) {
System.out.println(st.getElementsByTag("strong").text());//부모 클래스 안에 있는 strong 태그의 내용물
//System.out.println(st.getElementsByTag("a").text());
}
}
}
'Java' 카테고리의 다른 글
자바 jdk 설치 및 환경 변수 설정 (0) | 2018.06.21 |
---|---|
이클립스(eclipse)에서 웹 크롤링 with MongoDB (0) | 2018.05.16 |