'파이썬 크롤링'에 해당되는 글 1건

  1. 2023.07.30 [크롤링] 파이썬으로 네이버 뉴스 크롤링하기 - 뉴스 한개
반응형

1. 파이썬으로 네이버 뉴스 크롤링 하기

 

파이썬을 사용하여 네이버 뉴스 크롤링을 수행하는 것은 기본적으로 가능하지만, 몇 가지 어려움이 있을 수 있다. 네이버 뉴스 크롤링에는 다음과 같은 요소들이 관련됩니다:

1) 동적 웹 페이지: 네이버 뉴스 페이지는 주로 동적으로 생성되는 페이지입니다. 자바스크립트로 로딩되는 내용이 많아서 단순한 HTML 파싱만으로는 원하는 정보에 접근하기 어려울 수 있습니다. 이 경우에는 requests와 BeautifulSoup만으로는 부족할 수 있으며, 자바스크립트를 실행하고 동적으로 로딩되는 데이터에 접근하기 위해 추가적인 라이브러리나 기술이 필요할 수 있습니다.

2) 로봇 배제 표준 (Robots.txt): 네이버 뉴스 사이트도 로봇 배제 표준을 사용하여 크롤링을 제한할 수 있습니다. 따라서 robots.txt 파일을 확인하고 적절한 접근 권한을 준수해야 합니다.

3) 네이버 뉴스 구조의 변경: 네이버는 뉴스 페이지의 디자인이나 구조를 변경할 수 있습니다. 이에 따라 크롤링 코드도 조정해야 할 수 있습니다.

4) 데이터 정제 및 가공: 네이버 뉴스 페이지에서 얻은 데이터는 HTML로 제공되며, 이를 파싱하고 원하는 형식으로 가공해야 합니다. 가끔 HTML 구조가 복잡할 수 있어서 데이터를 추출하거나 정제하는 과정이 어려울 수 있습니다. 이러한 어려움들은 파이썬을 이용한 네이버 뉴스 크롤링을 시도할 때 고려해야 할 사항입니다. 도전적인 부분이 있을 수 있으므로, 필요한 기술과 라이브러리를 숙지하고 웹 크롤링에 관련된 법적 및 윤리적 규칙을 준수하면서 진행하는 것이 좋습니다.

 

2. 파이썬 코드와 결과값

<파이썬 코드 내용>

import requests
from bs4 import BeautifulSoup

url = requests.get('https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=28&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1')
html = BeautifulSoup(url.text)
html.find('a',class_='news_tit').text

<결과>

"에코프로 '황제주' 복귀했지만…떨고 있는 개미들"

 

파이썬 크롤링 할 때 가장 많이 쓰는 함수가 아마도 BeautifulSoup일 것이다. 이는 주로 웹 페이지의 HTML 또는 XML 코드를 파싱하고 원하는 정보를 추출하는 데 사용된다.  웹 페이지에서 정보를 수집하거나 원하는 데이터를 추출해야 할 때 BeautifulSoup을 사용한다. 웹 사이트의 HTML 코드를 파싱하여 제목, 본문 내용, 링크, 이미지 등을 추출할 수 있다. 크롤링한 데이터를 정제하거나 필요한 형식으로 변환해야 할 때도 BeautifulSoup을 사용한다. 추출한 데이터 중에서 필요없는 부분을 제거하거나, 특정 패턴을 가진 데이터를 변환하는 작업에 활용된다. 웹 사이트의 구조를 파악하고 태그의 계층 구조를 분석해야 할 때 BeautifulSoup을 사용한다. 그리고  웹 페이지 내의 특정 태그를 찾고 다른 태그와의 관계를 이해하는 데 도움을 준다.HTML에서 텍스트 데이터를 추출하여 자연어 처리 작업을 수행하거나 특정 키워드를 찾는 등의 텍스트 분석 작업에도 BeautifulSoup을 활용할 수도 있다. 결론적으로, BeautifulSoup은 웹 크롤링과 스크레이핑 작업을 수행할 때 웹 페이지의 구조를 이해하고 원하는 정보를 추출하고 처리하는 데 유용한 도구이다.

 

3. 파이썬 코드 내용 설명

<파이썬 코드 내용 설명>
먼저 네이버 뉴스에서 "에코프로"라는 키워드로 검색을 해보자

 
여러 페이지를 크롤링 하기 위해 맨 아래 페이지 넘버에서 1을 클릭해주고 나서 url을 복사해 주면 된다. 그러면 아래 처럼 url 맨 마지막이 1로 끝나는 걸 알 수 있다. url은 사이트마다 구조가 다르니 모든 사이트라 이 규칙을 따르는건 아니기에 주의해야 한다.
 
https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=44&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1

태그 a 아래 class 속성은 'news_tit'임을 알 수 있다. 
 

위 내용까지 크롤링을 하면 아래와 같다.

import requests
from bs4 import BeautifulSoup

url = requests.get('https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=28&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1')
html = BeautifulSoup(url.text)
html.find('a',class_='news_tit')

그러면 아래와 같은 결과값이 나온다. 여기서 text만 뽑아주면 크롤링 완성!

import requests
from bs4 import BeautifulSoup

url = requests.get('https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%97%90%EC%BD%94%ED%94%84%EB%A1%9C&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=28&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=1')
html = BeautifulSoup(url.text)
html.find('a',class_='news_tit').text

 

 크롤링은 많은 연습이 필요하고 익숙해져야 할 수 있는 작업인 것 같다. 매일매일 크롤링을 하지는 못하지만, 최소 1주일에는 1-2개 정도의 프로젝트를 진행하면서 그 감을 잃지 않으려고 노력하고 있다. 지금은 간단하게 네이버 뉴스의 제목정도를 크롤링 하는 수준이지만, 이러한 내용도 반복하다 보면, 제목, 내용, 내용 요약, 내용 요약 바탕으로 텍스트 마이닝 등의 작업도 할 수 있지 않을까 한다.
 

 

 

반응형
Posted by 마르띤
,