728x90
웹 크롤링의 개념
웹 크롤링은 인터넷 상에 존재하는 웹 페이지들을 자동으로 탐색하고, 그 페이지들로부터 데이터를 추출하는 과정을 말한다
웹크롤링의 활용
1. 데이터 수집 및 분석
비즈니스 인텔리전스, 시장 조사 등을 위해 웹 상의 정보를 수집하고 분석한다
2. 온라인 가격 비교
제품 가격을 비교하거나 특정 제품의 가격 변동을 추적하여 최저가를 찾아내는 데 사용된다
3. 콘텐츠 집계
뉴스나 블로그의 최신 콘텐츠를 집계하여 특정 주제의 업데이트를 추적하거나 정리한다
4. SEO 최적화
웹 사이트의 페이지를 분석하여 검색 엔진 최적화를 위한 키워드 분석이나 링크 분석을 수행한다
웹 크롤링 시 주의사항
크롤링을 허용하는지를 확인해야 하며, 저작권에 관련해서 데이터를 수집하는 것을 주의해야 한다
뉴스 크롤링
URL
네이버 뉴스
정치, 경제, 사회, 생활/문화, 세계, IT/과학 등 언론사별, 분야별 뉴스 기사 제공
news.naver.com
URL 분석
위와 같이 정치, 경제, 사회 카테고리에 따라 100, 101, 102 으로 sid1의 값이 변하는 것을 확인할 수 있다.
따라서 코드를 아래와 같이 작성할 수 있다.
Crawling.java
public class Crawling {
public static void main(String[] args) {
final String url = "https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=";
for(int i = 100; i < 106; i++) { // 100 ~ 105 까지의 값을 저장하기 위해 반복문 실행
Connection conn = Jsoup.connect(url + i);
}
Document doc = null;
try {
doc = conn.get();
}
catch(Exception e) {
e.printStackTrace();
}
Elements elemsTitle = doc.select("a.sh_text_headline");
Elements elemsPress = doc.select("div.sh_text_press");
Elements elemsText = doc.select("dic.sh_text_lede");
}
}
Document 클래스를 이용하여 주소화된 페이지의 주소를 가져오고, Elements 클래스를 이용하여 페이지에서 각 요소들의 코드를 변수에 저장한다
다음으론 뉴스 분야 태그에 대해서 분석해야 한다
분야에서도 클래스명이 h2, h3, h4와 같이 1씩 증가하는 것을 확인할 수 있다
따라서, 아래와 같이 코드를 작성할 수 있다
Crawling.java
public class Crawling {
public static void main(String[] args) {
// ... (위의 코드)
String categoryName01 = "div#snb > h2.h";
String categoryName02 = " > a";
System.out.println(doc.select("a.h_news > span.blind").text() + " > ");
System.out.println(doc.select(categoryName01 + (i - 98) + categoryName02).text());
Iterator<Element> itrTitle = elemsTitle.iterator();
Iterator<Element> itrPress = elemsPress.iterator();
Iterator<Element> itrText = elemsText.iterator();
while(itrTitle.hasNext() && itrPress.hasNext() && itrText.hasNext()) {
String press = itrPress.next().text();
String title = itrTitle.next().text();
String text = itrText.next().text();
System.out.println(press + " : " + title);
System.out.println(text);
}
}
}
할 수 있도록 설정한 후, Iterator을 이용하여 읽어올 요소가 있는 동안 해당 각 요소들을 추출한 후, text()를 사용해서 텍스트만 자른 후 출력한다
728x90
'JAVA > JAVA 정리' 카테고리의 다른 글
[JAVA] MVC 패턴을 활용하여 결합도 낮추기 (0) | 2023.06.07 |
---|---|
[JAVA] MVC 패턴 (0) | 2023.06.06 |
[JAVA] 파일 입출력 (4) | 2023.06.04 |
[JAVA] 스레드 (0) | 2023.06.02 |
[JAVA] 컬렉션 프레임워크 (List 컬렉션, Set 컬렉션) (0) | 2023.06.01 |