파이썬 웹 스크래핑 기초 | Requests와 BeautifulSoup 라이브러리로 텍스트 데이터 추출하기
파이썬 웹 스크래핑 기초 | Requests와 BeautifulSoup 라이브러리로 텍스트 데이터 추출하기
웹사이트에서 원하는 정보를 쏙쏙 뽑아내고 싶으신가요? 파이썬을 이용하면 생각보다 훨씬 쉽답니다. 오늘은 가장 기본이 되는 Requests와 BeautifulSoup 라이브러리로 텍스트 데이터를 추출하는 방법을 알려드릴게요!
💡 핵심 요약
Requests 라이브러리로 웹 페이지 HTML 데이터를 0.5초 안에 불러올 수 있어요.
BeautifulSoup으로 HTML을 파싱하여 원하는 텍스트를 태그별로 정확하게 추출해냅니다.
스크래핑한 데이터는 엑셀이나 CSV 파일로 저장하여 2차 활용이 가능합니다.
🚀 웹 스크래핑, 왜 필요할까요?
웹 스크래핑은 인터넷에 공개된 데이터를 자동으로 수집하는 기술이에요. 예를 들어, 쇼핑몰에서 특정 상품의 가격 변동을 추적하거나, 뉴스 기사에서 특정 키워드 관련 정보를 모으는 등 정말 다양한 곳에 활용될 수 있답니다. 대량의 데이터를 효율적으로 다루는 데 필수적인 과정이죠.
💡 꿀팁! 특정 웹사이트의 '최신 공지사항'만 빠르게 확인하고 싶다면, 해당 부분의 HTML 구조를 파악해두었다가 주기적으로 스크래핑하는 자동화 스크립트를 만들어 보세요. 10분이면 끝난답니다!
🐍 Requests 라이브러리 기본 다지기
Requests 라이브러리는 파이썬에서 HTTP 요청을 보내는 데 가장 많이 사용되는 라이브러리입니다. 웹 페이지의 HTML 소스를 가져오는 핵심 역할을 하죠. 설치는 pip install requests 명령어로 간단하게 할 수 있어요. requests.get('URL') 함수를 사용하면 해당 URL의 응답 객체를 반환받을 수 있으며, 이 객체의 .text 속성을 통해 HTML 내용을 문자열 형태로 얻을 수 있답니다.
💡 꿀팁! 웹사이트에 따라 User-Agent 값을 변경해야 접근이 허용되는 경우가 있어요. 브라우저에서 개발자 도구(F12)를 열어 실제 내 브라우저의 User-Agent 값을 복사하여 headers 딕셔너리에 넣어 requests.get(url, headers=headers) 형태로 요청하면 더 많은 웹사이트에 접근할 수 있답니다.
🔍 BeautifulSoup으로 HTML 분석하기
Requests로 가져온 HTML 텍스트는 사람이 읽기 어렵죠. 이때 BeautifulSoup 라이브러리가 빛을 발합니다! pip install beautifulsoup4로 설치 후, BeautifulSoup(html_text, 'html.parser') 와 같이 객체를 생성하면 HTML을 구조적으로 다룰 수 있게 돼요. find(), find_all() 메서드를 사용하여 특정 태그(예: div, p, a)나 클래스, ID를 가진 요소를 쉽게 찾을 수 있습니다. 예를 들어, 모든 <p> 태그를 찾으려면 soup.find_all('p') 를 사용하면 된답니다.
💡 꿀팁! 특정 클래스 이름을 가진 모든 태그를 찾고 싶을 때, soup.find_all(class_='원하는_클래스명') 형태로 사용하세요. 클래스 이름 뒤에 밑줄(_)을 붙여야 파이썬 예약어와 충돌을 피할 수 있거든요.
✍️ 텍스트 데이터 추출 및 정제
BeautifulSoup으로 원하는 요소를 찾았다면, 이제 그 안의 텍스트만 추출할 차례입니다. 해당 요소 객체에 .text 속성을 사용하면 내부의 모든 텍스트를 가져올 수 있어요. 다만, 이 텍스트에는 불필요한 공백이나 줄바꿈 문자가 포함될 수 있으니 .strip() 메서드를 사용하여 양쪽 공백을 제거하고, .replace('
', '') 등으로 줄바꿈 문자를 처리하여 깔끔하게 정제하는 것이 좋습니다. 이렇게 추출하고 정제한 데이터는 리스트에 담아 관리하면 편리하답니다.
💡 꿀팁! 스크래핑한 텍스트에 HTML 태그가 남아있다면 .get_text() 메서드를 사용해보세요. 이 메서드는 .text와 유사하지만, 좀 더 정제된 텍스트를 반환해주고, separator 인자를 통해 원하는 구분자로 텍스트들을 합칠 수도 있어요. 예를 들어, element.get_text(separator=' ', strip=True) 처럼요.
💾 추출한 데이터 저장하기
스크래핑으로 수집한 소중한 데이터를 영구적으로 보관하려면 파일로 저장해야겠죠? 파이썬의 내장 파일 입출력 기능을 사용하거나, pandas 라이브러리를 활용하면 아주 쉽습니다. pandas를 사용하면 추출한 데이터를 DataFrame 형태로 만들어 to_csv() 메서드로 CSV 파일에 저장하거나, to_excel() 메서드로 엑셀 파일로 저장할 수 있어요. CSV 파일로 저장할 경우, encoding='utf-8-sig' 옵션을 사용하면 한글 깨짐 현상 없이 파일을 열 수 있답니다. 2026년 기준으로도 이 방법은 가장 효율적이에요.
💡 꿀팁! CSV 파일로 저장할 때, index=False 옵션을 추가하면 DataFrame의 인덱스 번호가 파일에 함께 저장되지 않아 더 깔끔하게 데이터를 관리할 수 있답니다. df.to_csv('output.csv', encoding='utf-8-sig', index=False) 처럼 사용해보세요.
⚠️ 웹 스크래핑 시 주의사항
웹 스크래핑은 강력한 도구지만, 몇 가지 주의할 점이 있습니다. 첫째, 각 웹사이트마다 robots.txt 파일을 확인하여 스크래핑 허용 범위를 준수해야 합니다. 둘째, 너무 빈번한 요청은 서버에 부담을 줄 수 있으므로, 요청 사이에 time.sleep(초)를 사용하여 적절한 딜레이를 주는 것이 예의입니다. 셋째, 민감한 개인 정보나 저작권이 있는 콘텐츠는 스크래핑하지 않도록 주의해야 합니다. 2026년에도 이러한 윤리적인 사용은 필수입니다.
💡 꿀팁! 스크래핑 중 예상치 못한 오류가 발생했을 때 프로그램을 종료시키지 않고 계속 진행하려면 try-except 구문을 활용하세요. 예를 들어, 특정 요소를 찾지 못했을 때 발생하는 AttributeError 등을 처리하여 전체 스크립트가 중단되는 것을 방지할 수 있답니다.
⚠️ 웹사이트 이용 약관을 반드시 확인하고, 서버에 과부하를 주는 요청은 절대 삼가야 합니다.
❓ 자주 묻는 질문
Q. Requests와 BeautifulSoup 라이브러리는 어떻게 설치하나요?
명령 프롬프트(cmd) 또는 터미널에서 pip install requests beautifulsoup4 명령어를 입력하여 설치할 수 있습니다.
Q. 웹 스크래핑 시 IP가 차단될 수도 있나요?
네, 너무 짧은 간격으로 많은 요청을 보내면 서버에서 IP를 차단할 수 있습니다. time.sleep() 함수를 사용하여 요청 사이에 1~3초 정도의 딜레이를 주는 것이 좋습니다.
Q. BeautifulSoup으로 특정 태그 안에 있는 모든 텍스트를 어떻게 가져오나요?
찾고자 하는 태그 요소를 얻은 후, `.text` 속성을 사용하면 해당 태그와 그 하위 태그들의 모든 텍스트를 합쳐서 가져올 수 있습니다.
Q. 스크래핑한 데이터를 엑셀 파일로 저장하려면 어떻게 해야 하나요?
pandas 라이브러리를 설치한 후, 수집한 데이터를 DataFrame으로 만들어 df.to_excel('파일명.xlsx', index=False) 와 같이 사용하면 됩니다.
Q. 웹 스크래핑은 법적으로 문제가 되지는 않나요?
단순히 공개된 정보를 수집하는 것은 대부분 문제가 되지 않지만, 각 웹사이트의 이용 약관을 확인하고, robots.txt 파일을 준수해야 합니다. 민감한 개인 정보나 저작권이 있는 콘텐츠는 무단으로 수집하면 안 됩니다.
작성자: 로그
파이썬을 활용해 웹 스크래핑과 업무 자동화 프로그램을 개발하며 디지털 자산을 키워가는 평범한 직장인입니다. 반복되는 작업은 코드에 맡기고, 실무에서 직접 부딪히며 얻은 구체적인 문제 해결 노하우를 기록하고 공유합니다.
댓글
댓글 쓰기