오답노트
[selenium] 정적 페이지와 정적 페이지 웹 크롤링 본문
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()
'Python > Web Crawling' 카테고리의 다른 글
[scrapy] XPath로 정적 페이지 웹 크롤링 (0) | 2022.08.06 |
---|---|
[XPath] XPath (0) | 2022.08.06 |
[selenium] selenium 간단 사용법 (0) | 2022.08.05 |
[BeautifulSoup] 정적 페이지와 정적 페이지 웹 크롤링 (0) | 2022.08.05 |
[CSS] CSS Selector (0) | 2022.08.05 |