반응형

네이버 뉴스 크롤링을 하는 블로그 글은 정말 많다. 나는 처음 기초 과정에서 쉬운 내용으로 네이버 뉴스 웹크롤링을 해보려 한다. 가장 먼저 네이버 뉴스에 가보니 에코프로 뉴스가 눈에 띄어 이 검색어로 해 계속 해 보았다.

 

에코프로 뉴스 크롤링은 아래 글을 보면 된다. 이번에는 검색 시 나오는 여러 뉴스를 크롤링 해보려 한다.

 

 

[크롤링] 파이썬으로 네이버 뉴스 크롤링하기 - 뉴스 한개

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_secti

kmrho1103.tistory.com

 

<파이썬 코드는 아래와 같다>

6줄이면 충분히다. 별로 길지도 않고 어려운 코딩 내용도 없다. 

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)
for i in html.find_all('a',class_='news_tit'):
    print(i.text)

간단히 설명하면 아래와 같다. 먼저 패키지를 불러낸 후, url을 읽어냈다.

 

requests.get(url)는 파이썬의 requests 라이브러리를 사용하여 주어진 URL로 HTTP GET 요청을 보내고 해당 URL에서 반환된 응답을 받아올 때 사용된다. 이 함수의 사용 용도는 다음과 같다: 

 

1. 웹 페이지 다운로드: 주어진 URL의 웹 페이지나 웹 리소스(이미지, 동영상 등)를 다운로드하기 위해 사용된다. 웹 페이지의 HTML 코드나 원하는 파일을 가져오는 데 활용된다.

2. 데이터 요청: 서버로부터 특정 데이터를 요청하거나 API 엔드포인트에 요청을 보내서 데이터를 가져오기 위해 사용된다. 서버로부터 JSON 데이터나 XML 데이터와 같은 형식의 데이터를 가져올 수 있다.

3. 웹 스크레이핑: 웹 페이지의 내용을 크롤링하거나 원하는 정보를 추출하기 위해 사용된다. requests.get(url)를 사용하여 웹 페이지의 HTML 코드를 가져온 후, 이를 BeautifulSoup 또는 다른 파싱 라이브러리와 함께 사용하여 원하는 정보를 추출한다.

4. HTTP 상태 확인: 서버로부터 받은 HTTP 응답의 상태 코드를 확인하여 요청이 성공적으로 처리되었는지, 또는 오류가 발생했는지 확인할 수 있다.

 

예를 들어, 아래와 같이 사용할 수 있다:

import requests

url = 'https://www.example.com'
response = requests.get(url)

if response.status_code == 200:  # HTTP 200 OK
    html_content = response.text
    print(html_content)
else:
    print('Failed to retrieve the webpage')

 

url주소를 읽어냈으면 태그 정보를 읽어 내면 된다. 뉴스 한 개만 크롤링을 할 때는 find 였던 반면, 뉴스 여러개를 크롤링 할 때는 find_all을 사용하였다. 

 

find와 find_all은 BeautifulSoup 라이브러리에서 사용되는 메서드로, 웹 페이지의 HTML 코드를 파싱하여 원하는 정보를 추출할 때 사용되는데, 이 두 메서드의 차이점은 다음과 같다: 

 

1) find

find 메서드는 HTML 코드에서 지정한 태그를 하나만 찾아서 반환한다. 만약 해당 태그가 여러 개 존재한다면, 첫 번째로 발견된 태그만 반환한다. 일치하는 태그가 없을 경우 None을 반환한다. 일반적으로 find 메서드는 단일한 태그나 정보를 추출할 때 사용한다.

 

예)

from bs4 import BeautifulSoup

html = '<div><p>Hello</p><p>World</p></div>'
soup = BeautifulSoup(html, 'html.parser')
first_p = soup.find('p')  # 첫 번째 <p> 태그를 반환
print(first_p.text)  # 출력: Hello

 

2) find_all: 

find_all 메서드는 HTML 코드에서 지정한 태그를 모두 찾아 리스트로 반환한다. 일치하는 태그가 없을 경우 빈 리스트([])를 반환한다. 일반적으로 find_all 메서드는 여러 개의 태그나 정보를 추출하고자 할 때 사용된다.

 

예)

from bs4 import BeautifulSoup

html = '<div><p>Hello</p><p>World</p></div>'
soup = BeautifulSoup(html, 'html.parser')
all_p = soup.find_all('p')  # 모든 <p> 태그를 리스트로 반환
for p in all_p:
    print(p.text)
# 출력:
# Hello
# World

요약하자면, find 메서드는 첫 번째로 일치하는 태그를 반환하고, find_all 메서드는 모든 일치하는 태그를 리스트로 반환한다. 필요에 따라 적절한 메서드를 사용하여 원하는 정보를 추출하면 된다.

 

자 이제는 class 태그 정보를 확인하면 된다. 처음 태그 정보를 볼 때는 한 눈에 잘 안보였는데 보다 보니 class만 찾는 요령이 생겼다. 하나하나 따라 칠 필요 없이, 더블클릭을 하면 복사가 되니 이 또한 좋은 팁일것이다.

크롤링 할 때 class와 id 둘다 사용 가능한데, 두개의 차이는 아래와 같다.

 

1) class:

class는 여러 요소들에 동일한 스타일을 적용하고자 할 때 사용된다. 하나의 요소에 여러 개의 클래스를 할당할 수 있으며, 공백으로 구분하여 여러 클래스를 지정한다. 스타일 시트(CSS)에서 클래스 선택자를 사용하여 해당 클래스가 적용된 요소들을 선택할 수 있다. 예시: <div class="container main">

 

2) id:

id는 문서 내에서 고유한 식별자(identifier)를 가진 요소를 나타낸다. 한 문서 내에서 같은 id를 가진 요소는 하나만 존재해야 하며, 중복되어서는 안된다. 자바스크립트나 CSS에서 특정 요소를 선택하거나 조작할 때 사용된다. 예시: <h1 id="title">

 

간단한 예시로, 다음과 같은 HTML 코드가 있다고 가정:

<div class="box">This is a box with class</div>
<div class="box">This is another box with class</div>
<div id="unique">This is a unique box with id</div>

위의 코드에서 첫 번째와 두 번째 div 요소는 class 속성으로 스타일링이나 선택이 가능하다. 하지만 세 번째 div 요소는 id 속성으로 고유한 식별자를 가지므로, 해당 id를 이용하여 자바스크립트나 CSS에서 선택하거나 조작할 수 있다. 요약하면, class는 여러 요소에 같은 스타일을 적용하거나 선택하는 용도로 사용되며, id는 문서 내에서 특정 요소를 고유하게 식별하고 선택하는 용도로 사용한다고 보면 된다.

 

print(i.text)를 통해 결과값을 아래처럼 얻을 수 있다. 10개 뉴스의 타이틀만 쉽게 볼 수 있다. 증권가에서 발생하고 있는 에코프로 뉴스에 대해 대략적으로 알 수 있는 좋은 방법이다.

네이버 뉴스의 경우 시간이 지나면 태그 정보가 바뀌어 위처럼 똑같이 해도 안될 수가 있으니 그럴 때는 url, tag 정보만 업데이트 하면 크롤링에는 큰 문제는 없을 것이다.

반응형
Posted by 마르띤
,