crawling

Selenium & BeautifulSoup 연동 방법 / 유우키 영상 크롤링하기

hayleyhell 2023. 1. 27. 22:19

 

1. 반복문으로 스크롤 횟수 제한

# 7번 스크롤 
for i in range(7): 
    # 맨 아래로 스크롤을 내린다. 
    browser.find_element(By.CSS_SELECTOR, 'body').send_keys(Keys.END)

    # 스크롤 사이 페이지 로딩 시간 
    time.sleep(1)

    if i >= 6: 
        break

 

 

2. selenium으로 크롤링하기 

# selenium 
contents = browser.find_elements(By.CSS_SELECTOR, 'div.text-wrapper.style-scope.ytd-video-renderer')
for content in contents : 
    title = content.find_element(By.CSS_SELECTOR, '#video-title').get_attribute('title') 
    url = 'https://www.youtube.com/' + content.find_element(By.CSS_SELECTOR, '#video-title').get_attribute('href') 
    view = content.find_element(By.CSS_SELECTOR, '#metadata-line > span:nth-child(3)').text 
    createdAt = content.find_element(By.CSS_SELECTOR, '#metadata-line > span:nth-child(4)').text 
    
    ws.append([title, url, view, createdAt])

 

 

3.  selenium & BeautifulSoup 연동하기  

# selenium으로 가져오면 느리다. 
# selenium & BeautifulSoup 연동 방법 
html = browser.page_source 
soup = BeautifulSoup(html, 'html.parser')

contents = soup.select('div.text-wrapper.style-scope.ytd-video-renderer') 
for content in contents : 
    title = content.select_one('a#video-title').attrs['title'] # attrs를 선택할 때는 select_one 주의
    url = 'https://www.youtube.com/' + content.select_one('a#video-title').attrs['href']
    view = content.select_one('div#metadata-line > span:nth-child(3)').text 
    createdAt = content.select_one('div#metadata-line > span:nth-child(4)').text

 

 

크롤링 결과 ↓

youtube.xlsx
0.02MB