일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 셀레니움
- colab runtime
- 파이썬
- 코랩 런타임
- 혁신성장부문
- Chat-GPT
- 알고리즘
- clustering
- 인스타그램
- 2164 카드2
- flask
- 괄호 문제
- Selenium
- python buildpacks
- geopandas
- 웹페이지
- kmeans
- 플라스크
- Python
- NLP
- to shp
- 해시태그
- convert to shp
- geoDataFrame
- 크롤링
- 백준
- Crawling
- Merge Repositories
- string to list
- plotly dash
Archives
- Today
- Total
코딩코딩코딩
유튜브(Youtube) 크롤링 - selenium - 2 본문
지난번 글은 셀리니움을 통해 유튜브에서 필터링 설정을 했습니다.
이번에는 셀레니움으로 접속하는 것이 아니라 url을 미리 설정하여 접속한 뒤 크롤링을 진행하도록 하겠습니다.
이후에 셀레니움으로 접속해서 필터링을 설정한 후 크롤링할 예정입니다.
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def get_image_title(url):
# 웹 드라이버 초기화
driver_path = "C:\\Users\\Rectworks\\PycharmProjects\\chromedriver\\chromedriver.exe"
driver = webdriver.Chrome(driver_path)
driver.implicitly_wait(5) # or bigger second
# 열고자 하는 채널 -> 동영상 목록으로 된 url 페이지를 엶
driver.get(url)
image_list = list() # 썸네일을 받을 수 있는 주소 저장용 리스트
title_list = list() # 썸네일 제목을 저장하는 리스트
view_list = list() # 조회수 리스트
periods_list = list()
idx = 1
while True:
try:
img_xpath = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-grid-renderer/div[1]/ytd-grid-video-renderer['+str(idx)+']/div[1]/ytd-thumbnail/a/yt-img-shadow/img'
title_xpath = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-grid-renderer/div[1]/ytd-grid-video-renderer['+str(idx)+']/div[1]/div[1]/div[1]/h3/a'
viewcnt_xpath = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-grid-renderer/div[1]/ytd-grid-video-renderer['+str(idx)+']/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/span[1]'
period_xpath = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-grid-renderer/div[1]/ytd-grid-video-renderer['+str(idx)+']/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/span[2]'
# 이미지가 곧바로 로드 되지 않을 때, 20초간 강제로 기다림
img = WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, img_xpath)))
if img is None:
print(idx, 'img is not loaded.')
# 한 페이지에 약 8개 불러오는 데, 동영상 목록을 추가 불러오기 위해 스크롤 내림
if idx % 8 == 0 :
driver.execute_script('window.scrollBy(0, 1080);')
time.sleep(2)
driver.execute_script('window.scrollBy(0, 1080);')
time.sleep(2)
driver.execute_script('window.scrollBy(0, 1080);')
time.sleep(2)
# 썸네일 주소를 리스트에 저장
image = driver.find_element_by_xpath(img_xpath)
img_url = image.get_attribute('src')
image_list.append(img_url)
# 타이틀을 리스트에 저장
title = driver.find_element_by_xpath(title_xpath)
title_list.append(title.text)
# 조회수를 리스트에 저장
view = driver.find_element_by_xpath(viewcnt_xpath)
view_list.append(view.text)
# 시간을 리스트에 저장
period = driver.find_element_by_xpath(period_xpath)
periods_list.append(period)
print(idx, title.text, view.text, period.text, img_url)
idx += 1
except Exception as e:
print()
print(e)
break
assert len(image_list) == len(title_list)
# driver.close()
return image_list, view_list, periods_list, title_list
# 자이언트 펭TV
url1 = 'https://www.youtube.com/channel/UCtckgmUcpzqGnzcs7xEqMzQ/videos'
image1, view1, period1, title1 = get_image_title(url1)
펭TV 동영상 카테고리에 있는 동영상의 정보를 수집
이미지 링크는 썸네일 이미지로 보여짐
유튜브 채널 링크
https://www.youtube.com/channel/UCtckgmUcpzqGnzcs7xEqMzQ/videos
'파이썬 > 텍스트마이닝' 카테고리의 다른 글
파이썬 추천 알고리즘 (사용자 기반 / 콘텐츠 기반 협업 필터링, 하이브리드 추천 시스템) (1) | 2020.08.20 |
---|---|
유튜브(Youtube) 크롤링 - selenium - 3 (5) | 2020.08.13 |
유튜브(Youtube) 크롤링 - selenium - 1 (2) | 2020.08.05 |
인스타그램 해시태그 크롤링 및 분석 - 5 (5) | 2020.07.29 |
인스타그램 해시태그 크롤링 및 분석 - 4 (5) | 2020.07.27 |
Comments