6편. 실전 자동화 2: 특정 키워드 뉴스 기사 매일 아침 수집하기 (웹 크롤링 실전 코드)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
매일 아침 출근길이나 업무 시작 전, 관심 있는 비즈니스 키워드나 경쟁사의 최신 뉴스를 확인하는 것은 필수적입니다. 하지만 매번 포털 사이트에 접속해 검색어를 입력하고, 수많은 기사 중 진짜 필요한 정보만 골라내는 과정은 꽤 번거롭습니다. 지난 글에서 웹 크롤링의 기본 개념과 윤리적 주의사항을 가볍게 살펴보았다면, 오늘은 파이썬(Python)을 이용해 실제로 뉴스 기사 제목과 링크를 수집하는 '나만의 뉴스 수집 봇' 코드를 직접 작성해 보겠습니다.
복잡한 프로그램 설치 없이, 우리가 2편에서 세팅했던 리플릿(Replit) 브라우저 화면만 켜두시면 됩니다. 비전공자도 따라 할 수 있도록 가장 직관적인 두 가지 도구 상자(Requests, BeautifulSoup)를 활용하여 뼈대부터 하나씩 조립해 보겠습니다.
1단계: 크롤링 도구 상자 불러오기
파이썬에서 웹 크롤링을 할 때는 두 가지 라이브러리가 환상의 짝꿍으로 쓰입니다. 인터넷 브라우저처럼 특정 웹 주소(URL)에 접속해 데이터를 가져오는 '접속 담당' requests와, 가져온 복잡한 HTML 문서 안에서 우리가 원하는 글자만 예쁘게 다듬어주는 '추출 담당' BeautifulSoup입니다.
리플릿의 빈 화면에 아래 코드를 입력해 도구를 불러옵니다.
import requests from bs4 import BeautifulSoup
2단계: 사람처럼 위장하여 접속하기 (가장 중요)
제가 처음 크롤링을 시도했을 때 가장 당황했던 부분입니다. 완벽하게 코드를 짰다고 생각했는데, 빈 화면만 나오거나 에러가 났습니다. 이유는 대형 포털 사이트들이 로봇(매크로)의 무단 접근을 막아두었기 때문입니다.
이를 해결하려면 컴퓨터에게 "나 로봇 아니고, 크롬 브라우저 쓰는 진짜 사람이야!"라고 신분증을 쥐여주어야 합니다. 이것을 '헤더(Headers)' 설정이라고 합니다.
우리가 검색할 키워드와 포털 뉴스의 주소
search_word = "파이썬 자동화"
url = f"
사람인 척 위장하는 신분증 (User-Agent)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"}
URL에 신분증을 들고 접속(get) 요청하기
response = requests.get(url, headers=headers)
3단계: 복잡한 HTML에서 원하는 기사 제목만 찾아내기
response 안에는 해당 웹페이지의 모든 정보가 복잡한 텍스트 덩어리로 들어있습니다. 이제 BeautifulSoup을 시켜서 이 덩어리를 분석 가능한 상태로 요리한 뒤, 기사 제목에 해당하는 부분만 쏙쏙 뽑아오겠습니다.
가져온 텍스트를 BeautifulSoup으로 요리하기
soup = BeautifulSoup(response.text, "html.parser")
'뉴스 기사 제목'이 담긴 HTML 태그 덩어리들을 모두 찾기 (class 이름 활용)
articles = soup.find_all("a", class_="news_tit")
여기서 쓰인 news_tit은 해당 포털 사이트가 기사 제목에 붙여둔 고유한 이름표(클래스)입니다. 사이트마다 이 이름표가 다르므로, 나중에 다른 사이트를 크롤링하고 싶다면 크롬 브라우저의 '개발자 도구(F12)'를 열어 이름표를 직접 확인하는 응용이 필요합니다.
4단계: 수집한 기사 반복문으로 깔끔하게 출력하기
이제 articles라는 상자 안에는 여러 개의 기사 제목과 링크 정보가 들어있습니다. 지난 4편에서 배운 for 반복문을 사용해 데이터를 하나씩 꺼내 화면에 깔끔하게 출력해 보겠습니다.
for article in articles: # 기사의 실제 텍스트 제목만 추출 title = article.get_text() # 기사를 클릭했을 때 이동하는 실제 주소(링크) 추출 link = article.attrs["href"]
print("제목: " + title)
print("링크: " + link)
print("-" * 30)
상단의 'Run' 버튼을 누르면, 까만 콘솔 창에 내가 설정한 키워드의 최신 뉴스 제목과 링크가 단 1초 만에 좌르륵 쏟아지는 마법 같은 결과를 보실 수 있습니다.
초보자가 흔히 겪는 한계와 주의사항
코드가 정상적으로 작동하더라도, 다음과 같은 한계에 부딪힐 수 있습니다.
계속 빈 내용이 나와요:
requests도구는 화면을 띄워주는 자바스크립트(JavaScript) 기반의 동적 페이지는 잘 읽지 못합니다. 스크롤을 내려야만 글이 보이는 사이트는 나중에 '셀레늄(Selenium)'이라는 조금 더 고급 브라우저 제어 도구를 배워야 해결할 수 있습니다.서버에 부담 주지 않기:
for문으로 수천 개의 웹페이지를 단 1초 만에 긁어오려 하면 내 IP가 차단당할 수 있습니다. 반드시time.sleep(2)같은 명령어를 중간에 넣어 2초씩 쉬어가며 수집하는 '매너'를 지켜야 합니다.무단 배포 금지: 이렇게 수집한 기사 제목이나 링크를 혼자 확인하는 것은 문제없지만, 내용을 통째로 복사해 내 블로그나 웹사이트에 마치 내 글처럼 올리면 저작권법에 위배됩니다. 철저히 '개인적인 데이터 수집 및 분석 용도'로만 사용하시길 권장합니다.
핵심 요약
파이썬 크롤링의 기초는 웹에 접속하는
requests와 데이터를 추출하는BeautifulSoup의 조합입니다.포털 사이트 크롤링 시 차단을 피하려면 반드시 사람의 브라우저 환경을 흉내 내는
Headers설정을 추가해야 합니다.BeautifulSoup의find_all명령어로 원하는 데이터의 이름표(클래스)를 찾아내고,for반복문으로 결과물을 깔끔하게 출력할 수 있습니다.
수집된 기사들을 까만 화면(콘솔)으로만 보니 어딘가 아쉽지 않으신가요? 다음 7편에서는 오늘 긁어온 뉴스 기사 데이터를 보기 좋게 엑셀(Excel) 표로 깔끔하게 정리하여 내 컴퓨터에 자동 저장하는 '수집한 데이터 표로 정리하기 (Pandas 실전)' 과정을 단계별로 알아보겠습니다.
오늘 실습 코드를 실행해 보시면서 에러가 나거나, 내가 원하는 특정 사이트의 이름표를 찾는 방법이 궁금하시다면 언제든 편하게 댓글로 질문 남겨주세요!
#파이썬웹크롤링 #뉴스자동수집 #직장인파이썬 #코딩독학가이드 #BeautifulSoup #파이썬자동화코드 #애드센스승인포스팅

댓글
댓글 쓰기