일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 알고리즘
- 코랩 런타임
- Crawling
- 괄호 문제
- 셀레니움
- geopandas
- plotly dash
- 웹페이지
- 2164 카드2
- NLP
- Chat-GPT
- to shp
- string to list
- 크롤링
- 인스타그램
- python buildpacks
- Python
- Merge Repositories
- geoDataFrame
- 파이썬
- 혁신성장부문
- kmeans
- clustering
- 플라스크
- Selenium
- convert to shp
- colab runtime
- flask
- 해시태그
- 백준
Archives
- Today
- Total
코딩코딩코딩
유튜브(Youtube) 크롤링 - selenium - 3 본문
이전에 작성했던 셀레니움을 통해 접속, 검색필터 설정 + 영상 정보 크롤링 코드를 합쳐서 작성했습니다.
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
driver_path = "C:\\Users\\Rectworks\\PycharmProjects\\chromedriver\\chromedriver.exe"
driver = webdriver.Chrome(driver_path)
driver.implicitly_wait(5) # or bigger second
start_url = "https://www.youtube.com"
driver.get(start_url)
# browser.maximize_window()
driver.find_elements_by_xpath('//*[@id="search-input"]')[0].click()
driver.find_element_by_xpath('//*[@id="search-form"]/div/div/div/div[2]/input').send_keys("장마")
driver.find_element_by_xpath('//*[@id="search-form"]/div/div/div/div[2]/input').send_keys(Keys.RETURN)
# 필터 버튼 클릭
driver.find_element_by_xpath('//*[@id="container"]/ytd-toggle-button-renderer/a').click()
# 필터 기준 - 업로드 날짜 - 오늘
upload_date = driver.find_element_by_xpath('//*[@id="collapse-content"]/ytd-search-filter-group-renderer[1]')
click_list_1 = upload_date.find_elements_by_id("endpoint")
click_list_1[1].click()
# 필터 창이 내려가는 속도에 맞추기 위해서 임의로 sleep한 후에 버튼 클릭
time.sleep(2)
driver.find_element_by_xpath('//*[@id="container"]/ytd-toggle-button-renderer/a').click()
# 필터 기준 - 정렬 기준 - 조회수
sorting_std = driver.find_element_by_xpath('//*[@id="collapse-content"]/ytd-search-filter-group-renderer[5]')
click_list_5 = sorting_std.find_elements_by_id("endpoint")
click_list_5[2].click()
time.sleep(2)
### 필터링 광고창 넘어서 영상창으로 이동
pageidx = 1
for ad in range(5):
contents = driver.find_element_by_xpath('/html/body/ytd-app/div/ytd-page-manager/ytd-search/div[1]/ytd-two-column-search-results-renderer/div/ytd-section-list-renderer/div[2]/ytd-item-section-renderer['+str(pageidx)+']/div[3]')
renderer_list = contents.find_elements_by_tag_name("ytd-video-renderer")
if len(renderer_list) < 2:
pageidx += 1
else:
break
# 필터링하면 상단에 광고가 생기는 경우가 있음.
channel_list = []
title_list = []
viewCnt_list = []
time_list = []
videosNum = len(renderer_list)
print(videosNum)
for video in range(videosNum):
video_title = renderer_list[video].find_element_by_id("video-title").text
channel_id = renderer_list[video].find_element_by_id("text").text
metatxt = renderer_list[video].find_element_by_id("metadata-line").text
viewCnt = metatxt[:metatxt.find("\n")]
date = metatxt[metatxt.find("\n")+1:]
channel_list.append(channel_id)
time_list.append(date)
viewCnt_list.append(viewCnt)
title_list.append(video_title)
youtube_dict = {'채널':channel_list,
'조회수':viewCnt_list,
'시간':time_list,
'제목':title_list}
df = pd.DataFrame(youtube_dict)
df
이렇게 영상별 메타 정보를 확인할 수 있는데 페이지를 스크롤하는 기능을 더하면 더 많은 정보를 수집할 수 있습니다.
'파이썬 > 텍스트마이닝' 카테고리의 다른 글
파이썬 추천 알고리즘 (사용자 기반 / 콘텐츠 기반 협업 필터링, 하이브리드 추천 시스템) (1) | 2020.08.20 |
---|---|
유튜브(Youtube) 크롤링 - selenium - 2 (1) | 2020.08.12 |
유튜브(Youtube) 크롤링 - selenium - 1 (2) | 2020.08.05 |
인스타그램 해시태그 크롤링 및 분석 - 5 (5) | 2020.07.29 |
인스타그램 해시태그 크롤링 및 분석 - 4 (5) | 2020.07.27 |
Comments