본문 바로가기
데이터분석

네이버 뉴스 본문 크롤링 - 2부: 본문 내용 크롤링

by 홍보왕Yo 2023. 8. 13.

1부에 이어 이번에는 네이버뉴스 기사 본문 내용을 수집하겠습니다.

https://datawithyong.tistory.com/6

 

네이버 뉴스 본문 크롤링 - 1부: 본문 링크 출력

데이터 분석 10년차로 얻은 많으 경험을 공유하고 싶습니다. 특히 요즘도 많이 사용되고 있는 크롤링 기술에 대해 쉽고 빠르게 적용할 수 있는 글이 많지 않아 작성보고자 합니다. 1부에서 사용

datawithyong.tistory.com

1부에서 수집한 각 링크로 다시 requests 요청 진행해서 기사 내용을 수집합니다. 

for article in articles:
  links = article.select('a.info')
  if len(links) == 2:
    url = links[1].attrs['href']
    response_article = requests.get(url)
    html = response_article.text
    soup = BeautifulSoup(html, 'html.parser')
    print(soup)

* 만약 다음과 같은 오류가 날 경우 

Connection aborted

해결법: headers = {'User-Agent' : 'Mozila/5.0'} 옵션을 추가한다. 

for article in articles:
  links = article.select('a.info')
  if len(links) == 2:
    url = links[1].attrs['href']
    response_article = requests.get(url, headers={'User-agent': 'Mozila/5.0'})
    html = response_article.text
    soup = BeautifulSoup(html, 'html.parser')
    print(soup)

이중 기사 1개 본문으로 들어가봅시다!

예시: https://n.news.naver.com/mnews/article/092/0002301675?sid=105

반복문 적용:

for article in articles:
  links = article.select('a.info')
  if len(links) == 2:
    url = links[1].attrs['href']
    response_article = requests.get(url, headers={'User-agent': 'Mozila/5.0'})
    html = response_article.text
    soup = BeautifulSoup(html, 'html.parser')
    content = soup.select_one('#newsct_article')
    print(content.text)

안정적으로 수집하기 위해 시스템의 '잠시 멈춤'을 사용! 

import time
for article in articles:
  links = article.select('a.info')
  if len(links) == 2:
    url = links[1].attrs['href']
    response_article = requests.get(url, headers={'User-agent': 'Mozila/5.0'})
    html = response_article.text
    soup = BeautifulSoup(html, 'html.parser')
    content = soup.select_one('#newsct_article')
    print(content.text)
    time.sleep(0.3) # 0.3초 잠시 멈춤

이렇게 하여 본문을 수집할 수 있겠습니다!

다만!!

크롤링 제1원칙은 같은 종류의 사이트에 대한 반복적 수집이 제일 주요 포인트입니다!

그런데 네이버 연예 뉴스기사 또는 스포츠 기사는 형태가 조금 달라보입니다.

예시:

'일반' 네이버뉴스:

https://news.naver.com/

 

네이버 뉴스

정치, 경제, 사회, 생활/문화, 세계, IT/과학 등 언론사별, 분야별 뉴스 기사 제공

news.naver.com

네이버 연예 기사:

https://entertain.naver.com/home

 

네이버 TV연예

지금 가장 핫한 연예 이야기

entertain.naver.com

네이버 스포츠 기사:

https://sports.news.naver.com/index

 

스포츠홈 : 네이버 스포츠

스포츠의 시작과 끝!

sports.news.naver.com

------------------

크롤링 제2원칙: 사이트가 다른 경우 조건문을 추가하여 '통일' 시키자

 - 예시: 만약 OO 형태 URL 이면 OO CSS 선택자 사용, 그게 아니면 OOO CSS 선택자 사용!