'네이버뉴스 크롤링'에 해당되는 글 1건

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

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

 

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

 

 

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

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 마르띤
,