본문 바로가기
JAVA

jsoup를 이용한 언론사 크롤링하기

by 김마리님 2020. 8. 14.

https://itstudy-mary.tistory.com/137

 

Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(13) - iframe과 파싱을 이용해 유튜브 파싱하기

지난 게시글 >> Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(12) - 회원정보 수정하기 > Servlet 과 JSP를 이용한(모델2 형식) 블로그 만들기(11) - DTO(Data Transfer Object)를 이용한 블로그 수정과 삭..

itstudy-mary.tistory.com

전에 한번 jsoup에 대한 이야기를 한 적이 있었다. 주소를 파싱해서 값을 찾아서 html 내부의 값을 파싱해준다.

 

그러니까, 먼저 MavenRepository에서 Jsoup를 다운로드 받아 프로젝트에 빌드패스 한다.

https://itstudy-mary.tistory.com/72?category=902777

 

라이브러리(lombok) 설치하기

자바에는 기존 jar말고도 다양한 라이브러리가 있다. 그 중 lombok 라이브러리를 설치해보자. lombok은 getter, setter, 생성자를 자동으로 생성해주는 라이브러리다. 먼저, 다음 홈페이지를 들어간다. ht

itstudy-mary.tistory.com

 

빌드패스 한 이후 Jsoup로 데이터를 가져오는데, 이 때 쿼리스트링을 돌려서 쿼리스트링의 변화에 따라 언론사를 찾는다(언론사 쿼리 스트링 :  oid)

이 때 주의할 점은 같은 언론사 oid여도 글이 지워질 경우 언론사가 서치되지 않기 때문에 aid(글 번호) 쿼리스트링도 함께 돌려가면서 찾아야 한다.

package crawlingcode;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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

//1번 Jsoup (Maven)
//2번 Jsoup로 URL 요청
//3번 oid의 번호는 어디까지 있는지
//oid마다의 신문사명을 매칭

public class OidParse {

	public static void main(String[] args) {
		Map<String, String> oidMap = new HashMap<String, String>();
		Document news = null;
		int intOid = 1;
		int intAid = 1;
		String oid = "001";
		String aid = "0000000001";

		Elements element = null;
		String press = null;
		while (true) {
			try {

				aid = String.format("%010d", intAid);
				news = Jsoup.connect("https://news.naver.com/main/read.nhn?oid=" + oid + "&aid=" + aid).get();

				element = news.select("meta[property=\"me2:category1\"]");
				press = element.attr("content");

				if (press.equals("") || press == null) {
					if (intAid < 1000) {
						intAid = intAid + 10;
						aid = String.format("%010d", intAid);
						continue;
					} else {
						System.out.println(oid+"다 뒤져도 없엉..");
					}
				} else {
					System.out.print(oid+ "  ");
					System.out.println(press);
					oidMap.put(press, oid);
					System.out.println("전체 맵 길이는 : " + oidMap.size());

				}
				aid = "0000000001";
				intOid++;
				oid = String.format("%03d", intOid);

			} catch (IOException e) {
				intOid++;
				oid = String.format("%03d", intOid);
				// ignored.printStackTrace();
			}

		}

	}
}

반응형

'JAVA' 카테고리의 다른 글

20. 이벤트  (0) 2020.04.20
19. GUI  (0) 2020.04.20
18. 소켓 통신  (0) 2020.04.14
17. 멀티 스레드  (0) 2020.04.13
16. 익명 클래스  (0) 2020.04.13