Note

유튜브 채널 검색에 따른 채널 이름, 구독자 수, 영상 수 가져오기 본문

etc/Crawling

유튜브 채널 검색에 따른 채널 이름, 구독자 수, 영상 수 가져오기

알 수 없는 사용자 2022. 5. 2. 20:34
728x90
# 라이브러리 호출
from requests_html import HTMLSession,AsyncHTMLSession  #!pip install requests_html
from bs4 import BeautifulSoup as bs # importing BeautifulSoup
import nest_asyncio #!pip install nest_asyncio
import pandas as pd
import json
import re
import time
from tqdm import tqdm
import pymysql
from sqlalchemy import create_engine
pymysql.install_as_MySQLdb()
import MySQLdb
import numpy as np
import requests
from datetime import date,datetime
from sqlalchemy import create_engine
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import Insert
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import Chrome
import datetime as dt

url  = 'http://www.youtube.com' # 기본 url 설정

# 크롬 드라이버 옵션
driver = Chrome()
driver.implicitly_wait(3)
driver.get(url)  
driver.maximize_window()

# 검색창 클릭
searchform = driver.find_element_by_id("search-form")
searchform.click()

keyword = "입력하고 싶은 키워드"

# 키워드 입력
driver.find_element_by_name('search_query').send_keys(keyword)

# 검색 버튼 클릭
search = driver.find_element_by_xpath('//*[@id="search-icon-legacy"]')
search.click()

# 필터 클릭
ft = driver.find_element_by_xpath('//*[@id="container"]/ytd-toggle-button-renderer/a')
ft.click()

# 필터에서 채널 선택
channel = driver.find_element_by_link_text("채널")
channel.click()

body = driver.find_element_by_tag_name('body')

# html.find_all("yt-formatted-string", attrs={"class":'style-scope ytd-channel-name'})
# 처음엔 이걸 사용하였으나 중간에 유튜브 추천 영상이 존재
# 이 문제로 title과 나머지 변수 인덱스 불일치
# 각각 변수 지정 후 전처리하여 사용
title = html.find_all("ytd-channel-name", attrs={"class":'style-scope ytd-channel-renderer'})
video_count = html.find_all('span', {'id' : 'video-count'})
subscribers = html.find_all('span', {'id' : 'subscribers'})

 

Comments