네이버 기사 크롤링 step by step with R
이중 크롤링 - 1단계: 각 기사의 링크 주소 크롤링 - 2단계: 각 기사의 글 크롤링
네이버 기사 크롤링 step by step with R
이중 크롤링
- 1단계: 각 기사의 링크 주소 크롤링
- 2단계: 각 기사의 글 크롤링
step 1. 각 기사의 링크 주소 크롤링
HTTP 통신에 관련된 httr 라이브러리를 불러온다.
```{R}
library(httr)
통신에서 가져온 정보를 해석하는 용도. `rvest` 라이브러리를 가져온다.
library(rvest)
## 기사 목록 가져오기 start
`httr`의 GET함수를 이용해서 기사 웹 페이지 사이트를 `res`에 저장한다
res = GET(‘https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=102')
정상적으로 가져왔는지 `res`를 출력하여 확인한다. `Status: 200`으로 정상적으로 정보를 가져왔음을 확인 할 수 있다.
res

`res`의 HTML읽고와 `htext`에 저장한다.
htxt = read_html(res)
## 각 기사들의 링크 추출
기사의 소스 코드를 확인 하면 <a href> 노드에 기사 각각의 url이 들어있음을 확인 할 수 있다. (a href 노드는 뉴스기사 주소 링크에 행당.)
해당 페이지의 기사들을 전부 크롤링 하기 위해 더 큰 노드를 확인해보니 <div class = list body newsflash_body>에 들어있음을 확인!

읽어온 HTML에서 기사 링크에 해당하는 노드, `div.list_body`테그 안 `a`를 찾는다.
link = html_nodes(htxt, ‘div.list_body a’)
링크에서 기사 주소를 나타내는 어트리뷰트 `href`만 뽑아내고 `unique`의 함수를 이용해 중복을 제거한다. (이미지에 해당 링크가 있는 경우에는 링크가 중복이 있을 수 있고, 제목형 페이지나 모바일용 뉴스 화면에서 크롤링을 하게 되면 중복의 문제는 해결 할 수 있다.)
article.href = unique(html_attr(link, ‘href’))
중복은 제거 했지만, 주소형태가 아닌게 있을 수 있기 때문에 주소만 뽑아 오기위해 grep를 이용해 ‘http’만 있는 것만 뽑아 `article.href`에 저장한다.
grep(‘http’,article.href)
article.href = article.href[c(grep(‘http’,article.href))]
## step 2. 각 기사의 글 크롤링
for문과 GET함수를 이용해 article.href 노드의 해당 기사를 가지고 온다.
articles = for(href in article.href){
g=GET(href)
print(g)
}
결과 마무으리~
 메타데이터
- post_id
- bbc6b78ec29d
- slug
- 네이버-기사-크롤링-step-by-step-with-r-bbc6b78ec29d
- url
- https://medium.com/@yololife-sy/%EB%84%A4%EC%9D%B4%EB%B2%84-%EA%B8%B0%EC%82%AC-%ED%81%AC%EB%A1%A4%EB%A7%81-step-by-step-with-r-bbc6b78ec29d
- canonical_url
- https://medium.com/@yololife-sy/%EB%84%A4%EC%9D%B4%EB%B2%84-%EA%B8%B0%EC%82%AC-%ED%81%AC%EB%A1%A4%EB%A7%81-step-by-step-with-r-bbc6b78ec29d
- author_url
- https://medium.com/@yololife-sy
- status
- ok
- fetched_at
- 2026-06-27 07:40:21