'에스트라'에 해당되는 글 1건

  1. 2023.07.21 [Python] 웹 크롤링 - 올리브영 랭킹 크롤링
반응형

0. 웹 크롤링이 뭐야?

 

크롤링은 인터넷 상에서 웹 페이지를 순회하고, 웹 사이트에서 정보를 추출하는 자동화된 프로세스를 말합니다. 크롤링은 웹 크롤러 또는 스파이더라고 불리는 소프트웨어를 사용하여 이루어집니다. 이러한 소프트웨어는 웹 페이지의 내용을 다운로드하고 분석하여 원하는 정보를 추출하거나 웹 사이트의 구조와 링크를 파악하는 역할을 합니다.

크롤링의 주요 단계는 다음과 같습니다:

  1. 웹 페이지 다운로드: 크롤러는 웹 페이지의 HTML 코드를 다운로드하여 로컬로 저장합니다. 이 과정에서 웹 사이트의 서버에 부하를 주지 않도록 주의해야 합니다.
  2. HTML 분석: 다운로드한 HTML 코드를 파싱하여 웹 페이지의 구조와 내용을 분석합니다. 이를 통해 웹 페이지의 제목, 본문 내용, 이미지, 링크 등을 식별할 수 있습니다.
  3. 정보 추출: 분석한 HTML 코드에서 원하는 정보를 추출합니다. 예를 들어, 뉴스 웹사이트에서는 제목과 내용을 추출하거나, 제품 판매 사이트에서는 상품명과 가격을 추출할 수 있습니다.
  4. 링크 추출: 웹 페이지 내에 포함된 링크를 추출하여 다음에 크롤링할 페이지를 결정합니다. 이를 통해 웹 사이트 전체를 순회할 수 있습니다.
  5. 데이터 저장: 추출한 정보를 데이터베이스나 파일로 저장하여 나중에 활용할 수 있도록 합니다.

크롤링은 정보 수집이나 분석에 유용하지만, 합법적인 용도로 사용되어야 합니다. 일부 웹 사이트는 크롤링을 제한하기 위해 로봇 배제 표준(robots.txt) 파일을 사용하거나, 서비스 이용 약관에서 크롤링을 금지하는 조항을 포함할 수 있습니다. 합법성과 예의를 지키며 웹 크롤링을 수행하는 것이 중요합니다.

 

 

1.  올리브영 랭킹 크롤링

한국 올리브영은 주로 화장품, 스킨케어 제품, 메이크업 제품, 향수, 건강 보조제 등의 뷰티 제품을 판매하는 대형 뷰티 및 화장품 전문 매장 체인이다. 올리브영은 한국을 비롯한 다양한 국가에서 전 세계적으로 유명한 뷰티 브랜드의 제품을 한 자리에서 쉽게 구매할 수 있는 공간을 제공하며, 소비자들에게 다양한 제품 선택지와 트렌드에 맞는 뷰티 상품을 제공한다. 올리브영은 뷰티 제품에 초점을 맞추어 운영되는 브랜드로, 다양한 브랜드와 제품을 한 자리에서 만나보고 구매할 수 있는 공간으로 많은 사람들에게 이용되고 있다.

 

올리브영에서는 실시간 랭킹 정보를 제공해주고 있다. 이를 통해 현재 카테고리 별로 어느 제품들이 판매가 잘 되고 있는지 쉽게 알 수 있고, 썸네일을 클릭만 하면 쉽게 제품을 구매할 수 있어 제품 검색 시 큰 도움을 받고 있다. 이 글을 쓰고 있는 지금 현재 에스트라의 아토베리어 수딩크림이 1위를 달리고 있다.

올리브영 랭킹 바로가기 클릭
 
오늘은 이 올리브영 랭킹 정보를 크롤링 해보려 한다. 아래는 전체 코드이다.


1. 전체 코드 
import requests
import pandas as pd
from bs4 import BeautifulSoup

dic = {'user-agent' : 'Mozilla/5.0'}

url = requests.get('https://www.oliveyoung.co.kr/store/main/getBestList.do?dispCatNo=900000100100001&fltDispCatNo=10000010001&pageIdx=1&rowsPerPage=8',headers = dic)
html = BeautifulSoup(url.text)

brand = []
for i in html.find_all('span',class_='tx_brand'):
    brand.append(i.text)

product = []
for i in html.find_all('p',class_='tx_name'):
    product.append(i.text)

price = []
for i in html.find_all('span',class_='tx_cur'):
    price.append(i.find('span',class_='tx_num').text)
    
df = pd.DataFrame({'브랜드':brand, '상품':product,'가격':price})
df
2. 상세 코드

requests와 BeautifulSoup은 둘 다 파이썬을 이용하여 웹 크롤링 및 웹 스크레이핑을 수행할 때 사용되는 라이브러리이다.

  1. requests 라이브러리: requests는 HTTP 요청을 보내고 응답을 받는 작업을 처리하기 위한 라이브러리입니다. 웹 사이트의 데이터를 가져오기 위해 사용됩니다. 주로 웹 페이지의 HTML 코드를 가져오는 역할을 수행합니다. GET 또는 POST와 같은 HTTP 메서드를 사용하여 웹 서버로 요청을 보내고, 서버로부터 받은 응답을 받아서 처리합니다. 이러한 기능을 통해 웹 페이지의 내용을 다운로드하거나, API 엔드포인트로부터 데이터를 가져올 수 있습니다.
  2.  BeautifulSoup 라이브러리: BeautifulSoup은 파이썬의 HTML 및 XML 문서를 파싱하고 검색/조작하기 위한 라이브러리입니다. 주로 웹 페이지의 HTML 코드를 분석하고 원하는 정보를 추출하는 역할을 수행합니다. BeautifulSoup를 사용하여 웹 페이지의 태그, 클래스, 아이디 등을 기반으로 데이터를 필터링하거나 추출할 수 있습니다. 일반적으로, requests를 사용하여 웹 페이지의 내용을 가져온 후에는, 이를 BeautifulSoup로 파싱하여 원하는 정보를 추출하고 처리합니다. 즉, requests로 데이터를 가져오고, 그 후에 BeautifulSoup로 데이터를 다루는 것이 일반적인 크롤링 및 스크레이핑 작업의 흐름입니다.

# brand라는 빈 공간을 만들어 주고, 여기에 태그 정보 확인을 한다. 아래 사진 처럼 span이라는 태그 아래 tx_brand를 입력하면 된다.

brand = []
for i in html.find_all('span',class_='tx_brand'):
    brand.append(i.text)
 
# 상품정보도 위 브래드 정보를 넣는 방법과 유사하게 진행하면 된다.

product = []
for i in html.find_all('p',class_='tx_name'):
    product.append(i.text)
 
#가격 정보는 조금 달랐다. 왼쪽 썸네일에서 보는 것 처럼 할인 전 가격과 할인 후 가격 2개가 존재하였다. 
tag 정보에도 tx_org 아래 tx_num이 할인 전 가격이, tx_cur 아래 tx_num은 할인 후 가격이 나왔다.

price = []
for i in html.find_all('span',class_='tx_cur'):
    price.append(i.find('span',class_='tx_num').text)
 
 
# 데이터 프레임으로 만들기. 크롤링 된 모든 정보를 데이터 프레임으로 만드는 코드는 아래와 같다.
df = pd.DataFrame({'브랜드':brand, '상품':product,'가격':price})
df
 

짧다면 짧고 길다면 긴 파이썬 코드이다. 랭킹 정보를 직접 볼수도 있는데 이러한 파이썬 코드로 원하는 랭킹을 한 번에 볼 수 있는 내용이다. 추가적으로 썸네일 정보도 크롤링 하는 것을 공부 중인데, 공부가 완료되면 추가적으로 올릴 예정이다.

 

크롤링은 유용한 정보를 수집하고 가공하는 강력한 도구이지만, 몇 가지 어려움과 도전이 존재하기도 한다. 웹 사이트 구조의 변경: 웹 사이트는 자주 디자인 및 구조를 변경할 수 있습니다. 이로 인해 크롤러가 작동하지 않을 수 있거나, 이전에 동작하던 코드가 업데이트되어야 원하는 내용을 볼 수 있다. 혹시 그렇게 되면 블로그 내용도 업데이트 하려고 한다.

반응형
Posted by 마르띤
,