본문 바로가기
데이터분석

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

by 홍보왕Yo 2023. 8. 13.

데이터 분석 10년차로 얻은 많으 경험을 공유하고 싶습니다.

특히 요즘도 많이 사용되고 있는 크롤링 기술에 대해 쉽고 빠르게 적용할 수 있는 글이 많지 않아 작성보고자 합니다. 

 

1부에서 사용되는 원칙 1가지는 다음과 같습니다. 

크롤링 제1원칙: 같은 형태의 반복 수집 방식을 채택한다. 

 

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

 

진행 프로젝트: 네이버 뉴스의 본문 링크 가져오기! 

 - 같은 형태의 예시를 쉽게 설명드리기 위해 '네이버뉴스'가 담긴 뉴스만 채택하여 진행하겠습니다. 

 

 

네이버뉴스가 있음
네이버 뉴스가 없음

- 차이점:

  

'네이버뉴스' 가 있는 경우:

 - div.info_group

 - a 태그 2개

'네이버뉴스'가 없는 경우:

 - div.info_group

 - a 태그 1개

왜 2개인지 분석해보니 하나는 뉴스를 제공하는 사이트(뉴스1, 매일 경제 등)를 말하고, 다른 하나는 네이버 링크로 총 2개가 있는 것을 확인할 수 있겠습니다. 

 

본격적으로 크롤링을 진행해보겠습니다. 

- 모듈 불러오기

!pip3 install BeautifulSoup4
import requests
from bs4 import BeautifulSoup

- 애플 관련 네이버 뉴스 기사 진행하겠습니다.

 - 주소: https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%95%A0%ED%94%8C

response = requests.get('https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%95%A0%ED%94%8C')
html = response.text
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select('div.info_group') # 뉴스 기사 10개 추출

for article in articles:
  links = article.select('a.info')
  if len(links) == 2:
    url = links[1].attrs['href']
    print(url)

출력 결과:

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

참고 사항!!

CSS 선택 (class? id? 속성?)

class --> '.'

id --> '#'

attribute(속성) --> ['href']

자식 선택자 --> >

으로 연결해서 사용합니다. 

 

예시:

<div class = 'info_group'> 크롤링.

  </div>

--> .info_group

 

<div id = 'articleBody'> 크롤링.

  </div>

--> #articleBody

 

<div class = 'logo_sports'>

  <span> 스포츠 </span>

</div>

--> .logo_sports > span

 

<div class = 'news_headline'>

 <h4> 제목 </h4>

</div>

--> .news_headline > h4