오답노트

[selenium] 정적 페이지와 정적 페이지 웹 크롤링 본문

Python/Web Crawling

[selenium] 정적 페이지와 정적 페이지 웹 크롤링

권멋져 2022. 8. 5. 22:41

[selenium] selenium 간단 사용법

 

[selenium] selenium 간단 사용법

selenium selenium은 브라우저의 자동화 목적으로 만들어진 다양한 브러우저를 제어할 수 있도록 하는 라이브러리 selenium 사용준비 라이브러리 설치 !pip install selenium 파이썬에서 해당 소스를 실행시

dhjkl123.tistory.com

 

selenium을 이용한 정적 페이지 웹 크롤링

 

무신사 상품 랭킹을 가져오는 실습을 통해 알아보자

 

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.musinsa.com/ranking/best?period=now&age=ALL")

#find_elements함수는 CSS Selector가 가리키는 Element에 포함된 모든 Element를 가져온다.
e = driver.find_elements(By.CSS_SELECTOR,'#goodsRankList > li')

items = []
for i in range(1,len(e)+1):
    price = driver.find_element(By.CSS_SELECTOR,f'#goodsRankList > li:nth-child({i}) > div.li_inner > div.article_info > .price').text.replace("\n","")
    price_lst = price.replace(" ","").split("원")
    data = {"brand" : driver.find_element(By.CSS_SELECTOR,f'#goodsRankList > li:nth-child({i}) > div.li_inner > div.article_info > .item_title').text,
            "item" : driver.find_element(By.CSS_SELECTOR,f'#goodsRankList > li:nth-child({i}) > div.li_inner > div.article_info > .list_info').text,
            "price" : price_lst[len(price_lst)-2],
           }
    items.append(data)
    
df = pd.DataFrame(items)
display(df)

 

흐름은 BeautifulSoup과 동일하다. 다만 HTML에서 element를 선택하는 방식이 selenium으로 바꼈을 뿐이다.

 

find_element는 한 개의 element만을 가져오고,

find_elements는 여러 개의 element를 가져오는 차이가 있다.

 

주의

iframe은 element안에 웹페이지가 존재하는 형태이다.

따라서 iframe의 하위를 아무리 찾아가도 원하는 데이터를 얻을 수 없다.

 

따라서 아래 함수를 사용해서 iframe으로 객체를 이동한 후 크롤링은 진행해야한다.

# iframe 으로 이동 #
driver.switch_to.frame(iframe)

# default frame 으로 이동 #
driver.switch_to.default_content()