파이썬으로 웹 크롤링 고급편 5강입니다!
이번 강의에서는 실전에서 많이 활용되는 **이미지, PDF, 썸네일, 동영상** 등 다양한 **파일 형태의 콘텐츠를 수집**하는 방법을 다룹니다.
단순히 텍스트를 가져오는 것을 넘어서, 파일 다운로드까지 자동화하면 정보 수집의 효율이 크게 올라가고 활용도도 넓어집니다.
1. 이미지 수집 – 기본 구조
웹페이지에서 이미지의 URL을 추출한 후, 파일로 저장하는 기본 로직은 다음과 같습니다:
import requests
from bs4 import BeautifulSoup
import os
url = "https://example.com/gallery"
headers = {"User-Agent": "Mozilla/5.0"}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, "html.parser")
img_tags = soup.select("img")
os.makedirs("images", exist_ok=True)
for i, img in enumerate(img_tags):
img_url = img.get("src")
if img_url.startswith("http"):
img_data = requests.get(img_url).content
with open(f"images/image_{i}.jpg", "wb") as f:
f.write(img_data)
파일 확장자는 URL에서 직접 파싱하거나, 기본적으로 jpg/png로 저장하면 무방합니다.
2. 썸네일, 대표 이미지 추출 팁
<meta property="og:image">
로 대표 이미지가 지정되어 있는 경우가 많습니다.
예시:
og_img = soup.find("meta", property="og:image")
print(og_img["content"])
블로그, 뉴스, 유튜브 등에서 대표 썸네일을 추출할 때 유용합니다.
3. PDF / 파일 다운로드
PDF, 엑셀 등 특정 파일 링크를 자동으로 다운로드하고 싶을 땐 확장자로 필터링해보세요.
links = soup.select("a")
for link in links:
href = link.get("href")
if href and href.endswith(".pdf"):
file_data = requests.get(href).content
with open("downloaded.pdf", "wb") as f:
f.write(file_data)
파일명은 href에서 마지막 경로를 추출해 사용하는 방식도 많이 씁니다.
4. 유튜브 썸네일 크롤링
유튜브 영상의 대표 썸네일은 영상 ID만 알면 쉽게 가져올 수 있습니다.
video_id = "dQw4w9WgXcQ" # 예시
thumb_url = f"https://img.youtube.com/vi/{video_id}/maxresdefault.jpg"
img_data = requests.get(thumb_url).content
with open("thumbnail.jpg", "wb") as f:
f.write(img_data)
고화질 버전이 없을 경우엔 hqdefault.jpg
등을 사용할 수 있습니다.
5. Selenium에서 동적 이미지 수집
Selenium을 활용하면 무한 스크롤 페이지나 버튼 클릭 후 나타나는 이미지도 수집 가능합니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
browser = webdriver.Chrome()
browser.get("https://unsplash.com")
browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
imgs = browser.find_elements(By.TAG_NAME, "img")
for i, img in enumerate(imgs[:10]):
src = img.get_attribute("src")
if src:
img_data = requests.get(src).content
with open(f"image_{i}.jpg", "wb") as f:
f.write(img_data)
browser.quit()
많은 사이트에서 lazy-loading 방식으로 이미지를 늦게 불러오기 때문에, 스크롤을 내려주는 작업이 필요합니다.
6. 동영상 다운로드는 주의!
- 동영상 다운로드는 사이트의 이용약관을 반드시 확인해야 합니다.
- 공식 API가 제공되는 경우, 해당 방식 사용을 권장합니다.
기술적으로는 youtube_dl
, pytube
같은 라이브러리를 통해 다운로드가 가능하지만, 상업적 용도나 무단 배포는 불법이 될 수 있으니 꼭 주의해주세요!
7. 다음 강의 예고
6강 – 실전 미니 프로젝트: 카테고리별 뉴스/상품 자동 수집기 만들기
마지막 강의에서는 지금까지 배운 모든 내용을 활용해서 카테고리를 입력하면 뉴스 제목, 상품명, 이미지 등을 자동으로 수집해서 저장하는 실전 크롤러를 만들어봅니다. 엑셀로 저장하는 방법도 함께 배워요!
—
이 강의는 실무에서도 바로 활용할 수 있는 자동화형 크롤링 기술을 배우기 위한 고급 과정입니다. 드디어 마지막 단계가 다가오고 있어요!