가장 많은 사람들이 관심 가지는 뉴스부터 시작해 보겠습니다. 이번엔 BBC 웹사이트에서 뉴스 제목을 수집하는 간단한 크롤링 예제(BBC Web Crawling)를 Python(link)으로 구현해보겠습니다.


왜 BBC Web Crawling 할까요?

웹 크롤링을 처음 시작하는 입문자들에게 뉴스 사이트는 아주 좋은 출발점입니다. 특히 BBC 같은 글로벌 뉴스 플랫폼은 항상 최신 데이터를 제공하고, 구조가 비교적 규칙적이며, 수집한 데이터를 다양한 프로젝트에 활용할 수 있다는 점에서 탁월한 선택입니다.

그럼 하나씩 구체적으로 살펴볼까요?

1. 항상 새로운 콘텐츠

뉴스는 시간 단위로 업데이트되는 대표적인 콘텐츠입니다. 매일 새로운 뉴스가 올라오기 때문에, 웹 크롤링을 실습할 때 항상 신선한 데이터를 다룰 수 있는 장점이 있습니다.

2. 규칙적인 HTML 구조

BBC 웹사이트는 전 세계 사용자들을 대상으로 안정적인 서비스를 제공하기 위해 일정한 HTML 구조를 유지합니다. 이 덕분에 웹 페이지의 구조를 분석하고 크롤링하는 과정이 비교적 수월합니다.

3. 다양한 분석으로 확장 가능

수집한 뉴스 제목이나 기사 본문은 이후에 요약, 감성 분석, 키워드 추출, 워드클라우드 시각화 등 다양한 NLP(자연어처리) 프로젝트로 활용할 수 있습니다.


Step 1. BBC 메인 페이지 구조 이해하기

BBC Web Crawling 의 첫 단계는 대상 웹사이트의 구조를 파악하는 일입니다.

  1. 브라우저에서 https://www.bbc.com 접속
  2. 관심 있는 뉴스 타이틀 위에서 오른쪽 클릭 → ‘검사(Inspect)’ 선택
  3. 원하는 텍스트 요소 위에서 마우스 오른쪽 클릭 → ‘Copy selector’ 클릭

예시 Selector

예시 Selector:
main-content > article > section:nth-child(1) > div > ... > h2

하지만 이 방식은 클래스명이나 DOM 구조가 바뀌면 금방 작동하지 않게 됩니다.
그래서 좀 더 범용적이고 유연한 선택자로 접근하는 것이 중요합니다:

div > div > div > a > div > div > div > div > h2

또는 가장 많이 쓰이는 방법은 다음과 같은 태그 기반 선택자입니다:

h2, a[href]

Step 2. Python으로 BBC Web Crawling 구현하기

import requests
from bs4 import BeautifulSoup as HtmlParser

if __name__ == '__main__':
    my_header = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/125.0.0.0 Safari/537.36'
    }

    response = requests.get('https://www.bbc.com/', headers=my_header)
    soup = HtmlParser(response.text, "html.parser")

    html = soup.select_one('div > div > div > a > div > div > div > div > h2')

    if html:
        print("추출된 뉴스 제목:")
        print(html.text.strip())
    else:
        print("뉴스 제목을 찾을 수 없습니다.")

실행 예시

추출된 뉴스 제목:
G7 leaders plan new sanctions against Russia

※ 실시간 뉴스에 따라 결과는 매번 달라질 수 있습니다.


참고 및 팁

  • BBC는 글로벌 서비스를 제공하므로, HTML 구조가 지역/언어에 따라 조금씩 다를 수 있습니다.
  • 매번 selector를 수동으로 붙잡기보다는 h2, a[href], aria-label, class 속성 등으로 패턴 기반 접근을 연습해보세요.
  • 크롤링 전에 항상 사이트의 robots.txt 파일을 확인하여 수집 가능 여부를 체크하세요.

Step 3. 크롤링 확장 아이디어

BBC Web Crawling 으로 뉴스 제목 하나만 추출하는 것으로 끝나지 않습니다. 이를 바탕으로 다양한 응용 프로젝트로 발전시킬 수 있습니다.

전체 뉴스 제목 리스트 수집

select() 함수를 사용하면 페이지에 있는 여러 개의 h2 태그를 모두 가져올 수 있습니다.

titles = soup.select('h2')
for title in titles:
    print(title.text.strip())

기사 URL 함께 가져오기

links = soup.select('a[href]')
for link in links:
    print(link['href'])

제목과 링크를 매칭해 저장하면 뉴스 리스트를 자동 수집하는 시스템이 됩니다.

뉴스 요약 자동화

수집한 기사 내용을 Huggingface의 transformers 라이브러리 등을 활용해 요약할 수 있습니다.

CSV, SQLite 저장

데이터를 정리해서 CSV 파일로 저장하거나 SQLite DB에 넣으면 분석이나 검색이 훨씬 쉬워집니다.

import csv

with open('bbc_titles.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(['제목'])
    for title in titles:
        writer.writerow([title.text.strip()

알림 시스템 구축

수집된 뉴스 중 특정 키워드가 포함된 기사만 걸러서 텔레그램, 이메일, Slack으로 알림을 보낼 수 있습니다. 실시간 뉴스 모니터링 시스템으로 발전할 수 있죠.

키워드 분석 및 워드클라우드

뉴스 제목에 많이 등장하는 단어를 분석하여 트렌드를 시각화하면, 특정 이슈의 중요도를 파악할 수 있습니다.


마무리

BBC 뉴스 웹사이트는 구조가 안정적이고, 콘텐츠도 풍부해 크롤링 연습에 아주 적합합니다.
그래서 BBC Web Crawling 을 통해 단순한 제목 추출에서 시작해서, 요약, 자동화, 분석, 시각화까지 연결할 수 있기 때문에 초보자뿐 아니라 실전 프로젝트를 준비하는 분들에게도 매우 유익한 예제입니다.

Python의 requestsBeautifulSoup만으로도 충분히 강력한 크롤러를 만들 수 있으니, 이 기회를 통해 여러분만의 뉴스 분석 시스템을 만들어보세요.

Python을 사용하지 않고 크롤링 하는 방법


1. Node.js + Puppeteer

  • 특징: 브라우저를 실제로 띄워서 크롤링하는 방식 (헤드리스 브라우징).
  • 장점: 자바스크립트 기반 사이트도 쉽게 수집 가능.

2. Go + Colly

  • 특징: Go 언어의 경량 웹 크롤러 프레임워크.
  • 장점: 매우 빠르고, 병렬 처리에 강함.

3. PHP + Goutte

  • 특징: Symfony 기반의 PHP 크롤러.
  • 장점: PHP 웹 환경과 잘 통합됨.

4. R + rvest

  • 특징: R 기반의 웹 스크래핑 패키지.
  • 장점: 수집 후 바로 통계 분석 및 시각화 가능.

5. Browser Extension (Scraper, Web Scraper.io 등)

  • 특징: 크롬 확장 프로그램을 통한 노코드 크롤링.
  • 장점: 코딩 없이도 클릭만으로 데이터 수집 가능.
  • 활용: 반복되는 구조에 적합. 추출 후 CSV로 저장 가능.

마무리

방법언어/도구
Python + BeautifulSoup쉬움, 널리 사용됨
Node.js + Puppeteer동적 페이지 대응
Go + Colly빠르고 가벼움
PHP + Goutte서버사이드 PHP와 잘 어울림
R + rvest분석 중심 작업에 적합
Chrome Extension비개발자도 사용 가능

필요에 따라 도구를 선택하면 돼요. 각 방법마다 장단점이 있으니 프로젝트 성격에 맞춰 고르면 됩니다!

By Mark

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다