Home /etc/ 파이썬으로 네이버뉴스 크롤링(+엑셀에 넣기)
Post
Cancel

/etc/ 파이썬으로 네이버뉴스 크롤링(+엑셀에 넣기)



✔️ 크롤링 주의사항

  • 상업적으로 이용하면 안된다.
  • 크롤링 대상 서버에 부담을 주면 안된다.
     : 대형 웹사이트에는 무리를 주지 않겠지만,
     작은 사이트에 과도한 크롤링 요청은 트래 픽 초과등의 악영향을 줄 수 있고,
     심하면 서버가 멈출 위험성이 있다. 심하면 영업방해로 인한 처벌도 가능하다.



1. 파이썬으로 엑셀파일 생성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import openpyxl

# 1. 엑셀 만들기
wb = openpyxl.Workbook()

# 2. 엑셀 시트 만들기
ws = wb.create_sheet('네이버뉴스')

# 3) 데이터 추가하기
ws['A1'] = '기사 제목'
ws['B1'] = '기사 url'

# 4) 엑셀파일 저장하기
wb.save('네이버뉴스_data.xlsx')


작성후 실행하면
네이버뉴스_data의 이름을 가진 엑셀파일 하나가 생성된다.

파일 안에는 ‘네이버뉴스’라는 시크가 추가되어있고, 그안에 A1셀에 ‘기사 제목’을, B1셀에는 ‘기사 url’이 추가된 것을 확인할 수 있다.


사진



2. 파이썬으로 크롤링해 엑셀시트 채우기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import requests
from bs4 import BeautifulSoup 
import pyautogui # 창을 띄워 입력값을 받을 때 사용
import openpyxl # 엑셀 사용시 필요

fpath = '네이버뉴스_data.xlsx' 
wb = openpyxl.load_workbook(fpath)
ws = wb['네이버뉴스'] # 해당 시트 선택

keyword = pyautogui.prompt("검색어를 입력하세요>>>") # 검색어 입력창
lastpage = pyautogui.prompt("마지막 페이지번호를 입력해 주세요.") # 마지막 페이지번호 입력창

pageNum = 1
row = 2

# 크롤링하려는 페이지의 url이 1, 11. 21, .. 패턴으로 생겨서, 10씩 곱한값으로 출력
for i in range(1, int(lastpage) * 10, 10):
    url = f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}&start={i}" # 크롤링 해올 사이트의 url
    response = requests.get(url)
    html = response.text 
    soup = BeautifulSoup(html, 'html.parser') # html 번역을 도와줌
    links = soup.select(".news_tit") # 결과는 리스트
    for link in links:
        title = link.text # 태그 안에 텍스트요소를 가져옴
        url = link.attrs['href'] # href의 속성값을 가져옴
        print(title, url) # 콘솔창에서 프린트에 결과값 미리보기
        ws[f'A{row}'] = title # 엑셀파일 A열에 title 입력
        ws[f'B{row}'] = url   # 엑셀파일 B열에 url 입력
        row = row +1 # 다음 행
    pageNum = pageNum + 1 # 다음 페이지

wb.save(fpath) # 엑셀파일에 내용을 저장


사진

크롤링에 자주 사용하는 html 태그 종류



태그명역할
div구역 나누기, a태그의 부모태그
a링크, div태그의 자식태그
h1제목
p문단
ul, li목록



CSS 선택자


태그 선택자

HTML

1
2
<h1>제목입니다</h2>
<!-- 선택자 : h1 -->

id 선택자

HTML

1
2
<div id="articleBody">본문 내용입니다.</div>
<!-- 선택자 : #articleBody -->

class 선택자

HTML

1
2
<div class="info_group">뉴스 목록</div>
<!-- 선택자 : .info_group -->

자식 선택자

  • 보통 내가 원하는 태그에 별명이 없을 때 사용
  • 바로 아래에 있는 태그를 선택

HTML

1
2
3
4
<div class="logo_sports"> 
  <span>스포츠</span>
</div>
<!-- 선택자 : .info_group > span -->

HTML

1
2
3
4
<div class="news_headline"> 
  <h4>제목</h4>
</div>
<!-- 선택자 : .news_headline > h4 -->

class = / id = #




(참고)



공부한 내용을 여러글과 책 읽은 내용을 바탕으로 정리하고 있습니다.
좋은 글로 저의 공부에 도움을 주시는 분들께 감사드립니다.

This post is licensed under CC BY 4.0 by the author.