Language/Python
[Python] selenium - 크롤링 (2) actions을 이용한 스크롤링
도토리즈
2023. 6. 21. 22:19
actions 을 이용한 keys.PAGE_DOWN을 이용한
스크롤이 있는 페이지 데이터 크롤링 !
URL : https://shopping.naver.com/living/homeliving/home
네이버 쇼핑은 무한 스크롤이 있는 웹 페이지라서 크롤링 하게 되면 전체 요소가 나타나지 않음
따라서 스크롤링(PAGE DOWN) 하면서 데이터 정보 가져오기 !
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service as ChromeService
from bs4 import BeautifulSoup
import time
@api_view(['POST'])
def test(request) :
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True)
path = 'C:\\chromedriver\\chromedriver.exe'
service = ChromeService(executable_path=path)
driver = webdriver.Chrome(service= service , options=options)
url = "https://shopping.naver.com/living/homeliving/home"
driver.get(url)
driver.maximize_window()
# load 되는 시간까지 sleep 3초
time.sleep(3)
#스크롤 20번으로 조정
scroll_time = 20
title_list= []
actions = ActionChains(driver)
for i in range(0,scroll_time) :
names = driver.find_elements(By.CSS_SELECTOR, 'p.e1bUyeKcqU')
for name in names :
value = name.text
# title_list에 포함하지 않는 value만 append해줌 (중복 방지)
if value not in title_list :
title_list.append(value)
actions.send_keys(Keys.PAGE_DOWN)
actions.perform()
# no elements 방지를 위한 sleep
time.sleep(3)
print(title_list)
return Response({"title" : title_list})
전 )
후 )
스크롤 20번 내리면서 상품명 가져옴