Python부터 Web Scraping 까지 최단 시간에 익혀보자

이 글을 시작하게 된 계기

사이드 프로젝트로 재미(?)삼아 한정판 신발 커뮤니티를 만들고 있습니다. 웹 사이트의 구조가 잡히기 시작하면서 한정판 신발 정보를 데이터베이스에 저장할 필요가 생겼습니다. 다양한 브랜드의 한정판 신발은 불규칙적으로 정보가 공유되기 때문에 이를 모니터링하고 직접 입력하는 것은 불가능에 가깝다고 판단했습니다. 웹 크롤링을 이용하여 귀찮은 작업들을 자동화하기로 결정했습니다.

Web Scraping vs Web Crawling

직접 찾아보기 전까지는 웹 크롤링이란 웹에서 데이터를 가져오는 추상적인 뜻으로만 알고 있었습니다. Web Crawling 키워드로 여러 검색을 해본 결과 눈에 띄는 Web Scraping 이란 키워드가 있었습니다. Web Scraping 개념이 Crawling 보단 큰 개념으로 사용되고 있었습니다. 웹에서 데이터를 추출에 대한 정보를 얻고 싶은 경우에는 Web Scraping 이란 키워드로 검색하는 경우에 많은 정보를 얻을 수 있었습니다.

  • Web Scraping : 웹 상에서 데이터를 가져오거나 추출하는 모든 행위
  • Web Crawling : Web Scraping 를 자동화하여 웹에서 데이터를 가져오는 행위, 이를 수행하는 프로그램을 crawler, bot, spider 등으로 불린다.
웹에서 데이터를 가져오는 모든 행위를 Web Scraping
이를 자동화한 것이 Web Crawling

시작

웹 크롤러를 만들기 위해 python를 사용하여 웹 스크래핑의 기본을 알아보고자 합니다. python은 라이브러리도 방대하며 익히기 쉬운 언어입니다. 웹 크롤링에 대한 정보도 많으며 코드도 간편히 작성할 수 있을 거같아 python을 이용해 웹 스크래핑을 진행하겠습니다.

1. python 익히기

프로그래밍 언어가 처음이신 분들은 다음 링크들을 통해 책을 구매하여 익히거나 python를 익히는 걸 추천합니다.

필자의 경우에는 다른 프로그래밍 언어를 겪어봤기에 python 튜토리얼을 처음부터 보거나 Documentation 를 보는 것은 지루하고 거부감이 들었습니다. 이리 저리 찾아보고 가장 빨리 익힐 수 있는 방법을 찾았습니다. w3school 에서 제공하는 python Exercise 입니다. 프로그래밍 언어란 것이 다 비슷하게 사용하고 있으니 빈 칸을 채워가면서 하니 20여분 정도로 python 문법에 대해 알 수 있었습니다.

w3chool Exercise 강력 추천!!

2. 라이브러리 선택 & 설치

사용하는 언어의 라이브러리를 선택하기 제일 좋은 방법은 검색 창에 awesome python 입력하는 것이라고 생각합니다. 검색하면 깃허브에 정리가 깔끔히 되어있거나 패키지를 검색할 수 있는 사이트들이 눈에 띕니다.

awesome!

웹 스크래핑에는 두 가지 라이브러리가 필요합니다. 소스 코드 상에서 웹페이지 접근을 위한 HTTP Client 와 가져온 HTML를 추출하는데 사용할 Parser가 필요합니다. 포스팅에서는 다음과 같은 라이브러리를 사용하고자 합니다.

  • HTTP Client : Requests (내부 라이브러리 urllib 제공하나 requsets 문법이 간결함)
  • HTML / XML Parser : BeautifulSoup4

우선 파이썬 패키지 매니저 pip를 사용하여 Requests 와 BeautifulSoup4 라이브러리를 설치하겠습니다.

pip install requests 
pip install beautifulsoup4
pip list

3. 사이트 웹 스크래핑

우선, Requsets 라이브러리를 이용해 신발 정보 사이트 웹 페이지의 HTML 태그 정보를 가져오겠습니다

# Requests.py

import requests

r = requests.get('https://sneakernews.com/category/adidas/')
html = r.text

print(html)
코드 3줄로 웹페이지 Document 정보를 모두 볼 수 있다.

Beautifulsoup4 를 이용해 해당 웹 페이지 빨간색으로 박스 된 부분의 데이터를 추출하겠습니다. 해당 태그 부분은 가져온 크롬 개발자 도구 Elements 에서 해당 부분을 확인할 수 있었습니다.

HTML 태그에서 원하는 부분을 조회하는 경우에는 보통 CSS Selector를 사용합니다. (Web Page Components 에 대한 이해가 필요합니다) 다음과 같이 코드를 작성하면 원하는 부분만 조회가 가능합니다.

# Requests.py
import requests
from bs4 import BeautifulSoup

r = requests.get('https://sneakernews.com/category/adidas')
html = r.text

soup = BeautifulSoup(html, 'html.parser')
titles = soup.select('.post-content > h4 > a')

for title in titles:
    print(title.text)
해당 빨간색 부분만 추출할 수 있다.

정리

이번 포스팅을 통해 기본적인 웹 스크래핑 과정은 다음과 같이 요약할 수 있습니다.

  1. 가져오고자 하는 데이터 객체 정의 + 웹 페이지 선정
  2. 웹 페이지 상에서 추출하고자 하는 데이터 분석
  3. 웹 스크래핑 코드 작성
  4. 가져온 데이터 저장 (SQL, .xls, .csv, JSON 등)

python 부터 웹 스크래핑에 대해 빠르게 익혀보았습니다. python 과 라이브러리를 이용하니 간결하게 원하는 데이터를 얻을 수 있었습니다. 하지만 웹 스크래핑을 한번 경험해본 것에 불과합니다. 웹 스크래핑 자동화를 위한 웹 크롤러 만들기, 가져온 데이터를 저장하는 방법 등 생각하고 적용해야할 것들이 많습니다. 추후 사이드 프로젝트 웹 크롤러를 만들면서 의미있는 내용 공유하도록 하겠습니다.

답글 남기기

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