웹 크롤링 - 크롤링의 활용 (4)

2026. 7. 2. 23:58AI/웹 크롤링

1. BasicEnglishSpeaking 75개의 Topic 크롤링하기

 

다음 사이트에 컨텐츠로 있는 주제들 75개를 크롤링 해보자.

 

https://basicenglishspeaking.com/daily-english-conversation-topics/

 

(75 Audio Lessons) Daily English Conversation Practice | Questions and Answers By Topics - Basic English Speaking

The following lessons cover 75 TOPICS that you will face very often in your daily life. Each lesson is designed in form of ESL conversation questions and answers, followed by REAL English conversation audios, which will definitely benefit your English conv

basicenglishspeaking.com

import pandas as pd

site = 'https://basicenglishspeaking.com/daily-english-conversation-topics/'

request = requests.get(site)

soup = BeautifulSoup(request.text, 'html.parser')

div = soup.find('div', {'class': 'thrv-columns'})

links = div.find_all('a')

data = []

for i, link in enumerate(links, start=1):
	topic = link.text.strip()
    url = link.get('href')
    
    data.append(
    	{
        	'번호': i,
            '토픽': topic,
            '링크': url
        }
    )
    
df = pd.DataFrame(data)
df

 

2. 다음 뉴스 기사 크롤링하기

 

다음과 같은 뉴스 기사를 크롤링 해보자.

 

https://v.daum.net/v/20260702222743021

 

홍명보 전 감독, 손흥민 선발에서 뺀 이유 밝혔다..."오현규가 그렇게 될 줄 몰랐다"

[스포티비뉴스=신인섭 기자] 홍명보 전 감독이 손흥민을 선발에서 제외한 이유에 대해 입을 열었다. 또, 귀국 이틀 만에 출국길에 오르면서 공분을 사고 있다. 홍명보 감독은 2026 국제축구연맹(FI

v.daum.net

 

여기서 headers는 웹 브라우저가 서버에 보내는 추가 정보이며

 

크롤링에서는 서버가 요청을 정상적인 브라우저 접속으로 인식하도록 도와주는 역할이다.

 

User-Agent는 어떤 브라우저와 운영체제로 접속했는지 나타내는 정보로

 

이를 설정하지 않으면 일부 사이트는 프로그램(봇) 접속으로 판단하여

 

데이터를 차단하거나 빈 페이지를 반환할 수 있다.

 

Referer는 어떤 페이지에서 이동해왔는지 나타내는 정보이며

 

Bugs 같은 사이트는 내부 페이지 이동처럼 보여야 정상 응답을 주는 경우가 있어

 

함께 설정하는 경우가 많으며, headers는 크롤링 프로그램이 실제 사람이 사용하는

 

브라우저처럼 보이게 만들어 사이트 차단을 줄이고

 

안정적으로 데이터를 가져오기 위해 사용하는 중요한 설정으로 볼 수 있다.

 

def daum_news(news_id):
   url = f'https://v.daum.net/v/{news_id}'
    
   headers = {
    	'User-Agent': 'Mozila/5.0'
   }
   
   try:
     request = requests.get(url, headers=headers)
     
     # 요청 실패시 에러 발생시키기
     request.raise_for_status()
     
     soup = BeautifulSoup(request.text, 'html.parser')
     
     # 제목 가져오기
     title = soup.find('h3', {'class': 'tit_view'})
     
     if title:
       title = title.text.strip()
     else:
       title = "제목 없음"
       
     # 본문 가져오기
     content = soup.find('div', {'class': 'news_view'})
     
     if content:
       content = content.text.strip()
     else:
       content = "내용 없음"
       
     return {
     	'title': title,
        'content': content
     }
     
   except Exception as e:
     print("에러 발생:", e)
     return None
news = daum_news("20260702222743021")

print('제목:")
print(news['title'])

print("\n본문:")
print(news['content'])

 

robots.txt

 

robots.txt는 웹 사이트 운영자가 검색 엔진이나 크롤링 프로그램(봇)에게

 

어떤 페이지는 접근 가능하고, 어떤 페이지는 접근하지 말아야 하는지

 

알려주는 규칙 파일이다.

 

보통 사이트 뒤에 /robots.txt를 붙여 확인할 수 있다.

 

이 파일에는 특정 경로를 수집 금지하거나 허용하느 규칙이 작성되어 있고,

 

검색 엔진이나 크롤러는 이를 참고하여 사이트에 과도한 부하를 주지 않고

 

운영 정책을 존중하며 데이터를 수집한다.

 

다만, robots.txt는 강제 차단 시스템이 아니라 권장 규칙에 가까우므로

 

기술적으로 접근은 가능할 수 있으나 실무에서는 반드시

 

robots.txt와 사이트 이용 약관을 확인하고

 

서버에 무리를 주지 않는 범위에서 크롤링 하는 것이 중요하다.