본문 바로가기
PYTHON

[PYTHON] 정적 웹 크롤링

by G허니 2024. 3. 25.

웹크롤링은 웹페이지에서 데이터를 수집하는 과정입니다. 웹페이지는 크게 정적인 페이지와 동적인 페이지로 나뉩니다. 정적인 페이지는 한 번 로드되면 내용이 변경되지 않는 반면, 동적인 페이지는 사용자의 상호작용에 따라 서버에서 새로운 데이터를 받아와 화면이 변경됩니다.

 

웹크롤링 방법

  • 정적 페이지 크롤링: 주로 requests 라이브러리를 사용하여 HTML 문자열을 받아 파싱합니다.
  • 동적 페이지 크롤링: requests를 이용해 JSON 문자열로 데이터를 받아 파싱하거나, selenium을 사용하여 브라우저를 직접 열어 데이터를 받는 방법이 있습니다.

크롤링 속도 비교

  • 속도 비교: requests를 이용한 JSON 방식이 가장 빠르며, 그 다음으로 HTML 파싱 방식, 마지막으로 selenium을 사용하는 방식이 속도가 느립니다. 이는 selenium이 실제 브라우저를 열어 데이터를 받기 때문입니다.

 

 

0. 사용 라이브러리

import pandas as pd
import requests
from bs4 import BeautifulSoup

 

1. url

url = 'https://www.@@@/n/best'
res = requests.get(url)

 

2. request > response : str(html)

url = 'https://www.gmarket.co.kr/n/best'
res = requests.get(url)

dom = BeautifulSoup(res.text, 'html.parser')
type(dom)

selector = '#gBestWrap > div.best-list > ul > li'

elements = dom.select(selector)
len(elements), elements[0]

element = elements[0]

data = {
    'title' : element.select_one('.itemname').text,
    'img' : 'http' + element.select_one('img.image__lazy').get('src'),
}

 

selector 찾기

  1. 구글 크롬에서 크롤링할 페이지 찾기
  2. f12를 눌러 개발자 모드 진입
  3. Elements 클릭
  4. 크롤링할 요소 선택
  5. Copy 클릭
  6. Copy selector 클릭

 

3. bs > DataFrame

items = []
for elements in elements:
  data = {
    'title' : element.select_one('.itemname').text,
    'img' : 'http' + element.select_one('.image__lazy').get('src'),
    'price' : element.select_one('.s-price').text,
  }
  items.append(data)
len(items), items[0]

df = pd.DataFrame(items)
df.tail(2)

 

 

'PYTHON' 카테고리의 다른 글

[PYTHON] 공간 Filtering  (0) 2024.08.11
[PYTHON] 동적 웹 크롤링  (0) 2024.03.25