Можно ли как то улучшить данный код?

Я самостоятельно изучаю python и нахожусь на уровне junior (по моему мнению) и считаю что рано залез в selenium, написал сегодня парсер информации видеороликов, что можете сказать про мой код ? Можно ли его упростить, где я допустил ошибки, или лишние строки кода. Хочу понять для саморазвития, и что можно подтянуть, заранее благодарен

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from time import sleep

info_videos = {}
request = "https://www.youtube.com/results?search_query=" + input("Enter your request: ")
scroll_pause_time = 0.5

titles_locator = "//ytd-video-renderer[@class='style-scope ytd-item-section-renderer']//a[@id='video-title']"

info_locators = [
    "//h1/yt-formatted-string", 
    "//ytd-toggle-button-renderer/a/yt-formatted-string[@aria-label][@class='style-scope ytd-toggle-button-renderer style-text'][1]"]

btn_more_locators = [
    "//div[@id='above-the-fold']//tp-yt-paper-button[@id='expand']", 
    "//div[@id='container']//tp-yt-paper-button[@id]/yt-formatted-string[text()='Ещё']"]

try:
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    driver.get(request)
    for _ in range(2):
        try:
            render_section = WebDriverWait(driver, 120).until(
                EC.presence_of_element_located((By.XPATH, "//div[@class='style-scope ytd-section-list-renderer'][@id='contents']/ytd-continuation-item-renderer")))
            driver.execute_script("arguments[0].scrollIntoView();", render_section)
            sleep(scroll_pause_time)
        except Exception:
            continue
    
    url_videos = WebDriverWait(driver, 120).until(lambda d: [url.get_attribute("href") for url in d.find_elements(By.XPATH, titles_locator)])
    
    for url in url_videos:
        if "watch" not in url:
            continue
        driver.get(url)
        # Загружаем кнопку more
        list_btns_more = WebDriverWait(driver, 120).until(lambda d: False if [d.find_elements(By.XPATH, locator) for locator in btn_more_locators] == [[], []] else [d.find_elements(By.XPATH, locator) for locator in btn_more_locators])
        for tuple_btns_more in list_btns_more:
            for btn_more in tuple_btns_more:
                btn_more.click()
        # Собираем данные видеоролика и добавляем в словарь
        print("\nGather info...\n")

        info = WebDriverWait(driver, 120).until(lambda d: False if "" in [d.find_element(By.XPATH, locator).text for locator in info_locators] else [d.find_element(By.XPATH, locator).text for locator in info_locators])
        # отдельно ищем елемент описания поскольку он меняется каждый раз
        description = [elem.text for elem in (WebDriverWait(driver, 60).until(
            EC.presence_of_all_elements_located((By.XPATH, "//div[@id='description']//yt-formatted-string")))) if elem.is_displayed()][0]
        info.append(description)
        info[1] = "LIKES " + info[1]
        info_videos[url] = info
        print("[" + url + "]\n", info)

finally:
    for key, value in info_videos.items():
        print(key, "|", value, "\n")

    driver.close()
    driver.quit()

Ответы (0 шт):