| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- input
- IntelliJ
- 자바문법
- string
- java테스트
- math
- 자바
- Array
- ArrayList
- 테스트자동화
- js
- junit5
- 자바스크립트
- SpringBoot
- 인텔리제이
- Visual Studio Code
- junit
- Java
- CSS
- 문자열
- Eclipse
- html
- vscode
- 정규식
- 단위테스트
- javascript
- 배열
- 스프링부트
- list
- HashMap
- Today
- Total
어제 오늘 내일
[Python 실전] 15. "뉴스 제목 1초 만에 긁어오기" 웹 크롤링 기초 (requests, BeautifulSoup) 본문
[Python 실전] 15. "뉴스 제목 1초 만에 긁어오기" 웹 크롤링 기초 (requests, BeautifulSoup)
hi.anna 2026. 4. 13. 08:52매일 아침 출근해서 관심 있는 분야의 뉴스 기사 제목을 엑셀로 정리하는 업무가 있다고 가정해 봅시다. 마우스로 드래그하고, 복사하고, 붙여넣기... 100개의 기사를 정리하려면 한참이 걸립니다.
하지만 파이썬을 사용하면 이 모든 과정을 단 1초 만에 끝낼 수 있습니다. 인터넷 웹페이지에 있는 데이터를 파이썬이 대신 읽어서 필요한 부분만 쏙쏙 뽑아오는 기술, 바로 웹 크롤링(Web Scraping/Crawling)입니다.
오늘은 크롤링의 양대 산맥인 requests 패키지와 BeautifulSoup 패키지를 사용해 보겠습니다.
1. 크롤링 준비물 챙기기 (패키지 설치)
크롤링을 하려면 남이 만든 훌륭한 도구(외부 패키지) 두 개가 필요합니다. 터미널(명령 프롬프트)을 열고 아래 명령어를 입력해 설치해 주세요.
# 1. 웹페이지 접속을 도와주는 패키지
pip install requests
# 2. 복잡한 웹페이지 문서(HTML)에서 원하는 데이터만 예쁘게 발라내는 패키지
pip install beautifulsoup4
2. 웹 크롤링의 3단계 작동 원리
크롤링은 우리가 웹 브라우저(크롬, 사파리 등)로 인터넷을 하는 과정과 완전히 똑같습니다. 단지 사람이 눈으로 보는 대신, 파이썬 코드가 대신 읽어주는 것뿐입니다.
- 요청(Request): 파이썬이 대상 웹사이트에 "이 페이지 좀 보여줘!"라고 접속을 요청합니다. (
requests사용) - 응답(Response): 웹사이트가 파이썬에게 해당 페이지의 설계도인 HTML 문서를 던져줍니다.
- 추출(Parsing): 받은 HTML 문서에서 제목, 날짜, 본문 등 "내가 원하는 글자"만 예쁘게 핀셋으로 뽑아냅니다. (
BeautifulSoup사용)
3. F12 (개발자 도구)로 웹페이지 구조 훔쳐보기
크롤링을 하려면 내가 가져오고 싶은 데이터가 HTML 설계도 안에서 '어떤 이름표(클래스)'를 달고 있는지 알아야 합니다.
크롬(Chrome) 브라우저에서 네이버 뉴스(또는 아무 웹페이지)를 띄우고 키보드의 F12를 눌러보세요. 오른쪽에 복잡한 외계어 같은 코드가 나타납니다. 이것이 바로 웹페이지의 민낯인 HTML입니다.
- 돋보기(또는 화살표) 아이콘을 누르고 뉴스 제목을 클릭해 보세요.
- 뉴스 제목이
<a href="..." class="news_tit">같은 태그(Tag)로 감싸져 있는 것을 볼 수 있습니다. - 여기서
class="news_tit"이 부분이 바로 우리가 핀셋으로 집어낼 고유한 이름표입니다.
4. 실전! 파이썬으로 뉴스 제목 긁어오기
자, 이제 코드를 작성해 볼 차례입니다. (참고: 네이버 검색 결과의 뉴스 탭을 기준으로 한 예시입니다. 웹사이트의 구조는 수시로 바뀌므로, 클래스 이름은 F12를 눌러 직접 확인한 값으로 변경해야 할 수도 있습니다.)
📌 예제 코드: 파이썬 크롤러 만들기
import requests
from bs4 import BeautifulSoup
# 1. 접속할 웹페이지 주소 (네이버에 '파이썬'을 검색한 뉴스 탭 결과)
url = "https://search.naver.com/search.naver?where=news&query=파이썬"
# ⚠️ 꿀팁: 로봇(크롤러)이 아닌 척하기 위한 신분증(User-Agent) 생성
# 네이버 같은 대형 사이트는 기계가 접속하는 것을 차단하기도 합니다. "나 진짜 사람 브라우저야!"라고 속이는 코드입니다.
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/100.0.4896.75"}
# 2. 웹사이트에 접속해서 HTML 문서 받아오기 (requests)
response = requests.get(url, headers=headers)
# 접속이 잘 되었는지 확인 (200이 나오면 정상)
if response.status_code == 200:
# 3. 받아온 HTML 문서를 BeautifulSoup이 분석할 수 있게 끓이기(Parsing)
# response.text: 받아온 문서 전체 내용
# "html.parser": HTML 번역기 사용
soup = BeautifulSoup(response.text, "html.parser")
# 4. 원하는 데이터만 핀셋으로 쏙쏙 뽑아내기
# select() 함수는 조건에 맞는 모든 데이터를 '리스트' 형태로 찾아줍니다.
# HTML에서 class 이름으로 찾을 때는 이름 앞에 점(.)을 찍습니다!
titles = soup.select(".news_tit")
# 5. 찾은 데이터들(리스트)을 for문으로 하나씩 꺼내서 출력하기
# enumerate를 써서 1번부터 번호표를 붙여줍니다. (기억나시죠?)
for i, title in enumerate(titles, start=1):
# title.text: HTML 태그(<a...>)는 다 떼어버리고 진짜 '글자'만 가져옵니다.
# title["href"]: 기사를 클릭했을 때 이동하는 진짜 '링크 주소'를 가져옵니다.
print(f"{i}번째 기사: {title.text}")
print(f"링크: {title['href']}")
print("-" * 50)
else:
print(f"웹페이지 접속 실패! 에러 코드: {response.status_code}")
실행 결과:
1번째 기사: "파이썬으로 코딩해요"… 00구, 초등생 대상 디지털 교육
링크: https://n.news.naver.com/mnews/article/...
--------------------------------------------------
2번째 기사: 파이썬 등 IT 전문 인력 모십니다.
링크: https://www.어쩌구저쩌구.com/...
--------------------------------------------------
... (쭉 이어짐)
💡 코드 핵심 설명:
requests.get(): 지정한 주소로 접속해 데이터를 가져옵니다.soup.select(".클래스이름"): HTML 문서에서 해당 클래스 이름표를 단 모든 요소를 찾아 리스트로 반환합니다..text: 복잡한 기호들을 싹 지우고 우리 눈에 보이는 순수 텍스트만 추출합니다. 정말 편리하죠!
5. 크롤링할 때 반드시 지켜야 할 매너 (주의사항)
파이썬 크롤링은 너무나 강력해서, 자칫하면 상대방 웹사이트 서버를 다운시킬 수도 있습니다(이것이 바로 디도스 공격의 원리입니다). 따라서 지켜야 할 윤리가 있습니다.
- 너무 빠르게 반복하지 마세요:
for문을 돌려 수천 페이지를 긁어올 때는, 지난 시간에 배운 표준 라이브러리인time.sleep(1)(1초 쉬기) 등을 사용해 서버에 숨통을 트여주어야 합니다. - 저작권과 개인정보를 주의하세요: 남의 사이트에서 긁어온 데이터를 상업적으로 함부로 팔거나 배포하면 법적 처벌을 받을 수 있습니다. 가급적 '개인 학습 및 업무 자동화' 용도로만 사용하세요.
📝 마치며
오늘의 핵심 요약입니다.
requests.get(url): 해당 웹페이지의 전체 소스 코드(HTML)를 다운로드해온다.BeautifulSoup(html, "html.parser"): 다운로드한 코드를 탐색하기 쉽게 정돈해 준다.soup.select(".클래스명"): 정돈된 코드 중에서 내가 원하는 데이터(태그)만 쏙 뽑아 리스트로 만든다..text: 뽑아낸 데이터에서 군더더기를 버리고 순수 텍스트만 추출한다.
이제 여러분은 인터넷에 널려 있는 수많은 정보(주식 시세, 영화 평점, 부동산 가격 등)를 내 컴퓨터로 자동으로 가져올 수 있는 마법사가 되었습니다.
하지만 이렇게 터미널(까만 창)에 출력만 해두면 나중에 다시 보기가 힘들죠?
다음 포스팅에서는 "파이썬으로 엑셀 파일 만들고 서식까지 꾸미기" - openpyxl 라이브러리를 활용한 엑셀 노가다 해방 일지에 대해 알아보겠습니다. 방금 크롤링한 뉴스 제목들을 엑셀 파일로 예쁘게 저장해 볼게요!
도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍
'IT > Python' 카테고리의 다른 글
| [Python 실전] 17. "크롤링보다 100배 쉽고 정확하다!" 공공데이터 API 연동과 JSON 다루기 (1) | 2026.04.14 |
|---|---|
| [Python 실전] 16. "엑셀 노가다 완벽 해방!" openpyxl로 파이썬에서 엑셀 다루기 (0) | 2026.04.14 |
| [Python 기초] 14. "에러가 나도 멈추지 않아!" 프로그램 생명 연장, try-except 예외 처리 (0) | 2026.04.13 |
| [Python 기초] 13. "데이터를 내 컴퓨터에 영구 저장하자!" 텍스트 파일과 CSV 읽고 쓰기 (open, with) (1) | 2026.04.12 |
| [Python 기초] 12. "객체지향이긴 한데..." 파이썬 클래스(Class)와 self의 정체 완벽 이해 (0) | 2026.04.12 |