JAVA

크롤링 해보기 / Jsoup 의존성 추가

소힌 2022. 4. 22. 12:00

전체 코드임 ! 

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Main {

	public static void main(String[] args) throws IOException {
		int page = 3;
		String url = "https://www.saramin.co.kr/zf_user/search?search_area=main&search_done=y&search_optional_item=n&searchType=search&searchword=java&recruitSort=relation&recruitPageCount=100&recruitPage="+page;
		Document doc = Jsoup.connect(url).timeout(5000).get(); // 주소에 겟방식 요청 타임아웃은 5초는 기다려 준다는 것

		Elements links = doc.select("a[href]");
		// a태그인데 어트리뷰트로 href있는 것을 셀렉하는 것
		// 채용공고만 보고싶으니까 채용공고의 공통된 path주소로 된 것만 남기고 지운다

		Set<String> set = new HashSet<>();
		for (Element e : links) {
			String attr = e.attr("href");
			if (attr.startsWith("/zf_user/jobs/relay/view")) {
				set.add("https://www.saramin.co.kr" + attr);
			}
		}
		// for (String metaUrl : set) {
		// Document metaDoc = Jsoup.connect(metaUrl).timeout(2000).get();
		// String desc =
		// metaDoc.select("meta[name=description]").first().attr("content");
		// System.out.println(desc);
		// System.out.println("------------------");
		// }

		// 컬렉션은 스트림으로 바꿀 수 있다
		// 병렬적으로 바꿔주는 스트림
		// 맵은 하나하나 자료 연산을 통해 자료를 만든느 것
		
		//셋을 문자열 스트림으로 만드는 것 
		set.parallelStream().map((metaUrl) -> {
			// 원하는 람다형식 연산을 적어주면 됨
			Document metaDoc = null;
			try {
				metaDoc = Jsoup.connect(metaUrl).timeout(2000).get();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			return metaDoc.select("meta[name=description]").first().attr("content");
		}).forEach(x -> System.out.println(x));
	}

}

 

 

 

1. 일단 자바 프로젝트를 라이브러리 의존성 추가하여 사용하기 위해 configure 에서 메이븐 프로젝트로 전환해준다 

 

2. pom.xml에 jsoup 라이브러리 의존성을 추가해준다 

 

<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.3</version>
</dependency>

 

 

3. 일단 크롤링할 사이트를 선정하자 나는 ㅅㄹㅇ ! 

 

4. 정보를 가져올 페이지를 세팅해놓고 page=앞까지 가져온다 

 

https://www.saramin.co.kr/zf_user/search?search_area=main&search_done=y&search_optional_item=n&searchType=recently&searchword=java&loc_mcd=106000&cat_kewd=87&recruitPage=1 

 

java | 총 308건의 검색결과 - 사람인

java 검색결과 총 308건 - java에 대해 궁금하신가요? 관련 채용정보 87건,기업정보 126건,자료통 95건 등 취업에 꼭 필요한 자료를 사람인에서 확인해보세요.

www.saramin.co.kr

page= 뒤에는 내가 설정한 int page의 값으로 페이지를 조정할 것임 

 

 

 

4. String url 에 내가 긁어온 주소를 대입하고 

 

Document doc = Jsoup.connect(url).timeout(5000).get(); 

 

Jsoup의 connect를 통해 해당 주소에서 정보를 가져온다. Doucument 객체로 반환됨 

 

 

 

5.해당 페이지에 모든 정보가 담기는데 나는 페이지에서 채용 링크만 가져오고 싶다! 

 

Elements links = doc.select("a[href]");

 

a태그중 href를 어트리뷰트로 가지는 것으로 추려내는 것 

 

그리고 링크들 중에서도 채용정보 링크만 가져오고 싶으니 f12를 눌러서 채용 정보로 넘어가는 태그가 가지는 공통적인 path를 알아와야함 

 

 

 

6.  href 중에서 공통적인 경로로 시작하는 것이 있으면 set에 넣어준 후 조회 한다 

Set<String> set = new HashSet<>();
for (Element e : links) {
String attr = e.attr("href");
if (attr.startsWith("/zf_user/jobs/relay/view")) {
set.add("https://www.saramin.co.kr" + attr);
}
}