Соскрести все результаты поиска YouTube - PullRequest
2 голосов
/ 03 ноября 2019

Я пытаюсь собрать данные из результатов поиска YouTube. Термин поиска "border collie" с фильтром для загруженных видео "Сегодня" .

52 видео появляются в результатах поиска. Однако, когда я пытаюсь разобрать страницу, я получил только 20 записей. Как мне разобрать все 52 видео? Любые предложения приветствуются.

PS Я пробовал этот пост для инфинитивной страницы, но он не работал для YouTube.

Текущий код:

url = 'https://www.youtube.com/results?search_query=border+collie&sp=EgIIAg%253D%253D'
driver = webdriver.Chrome()
driver.get(url)

#waiting for the page to load
sleep(3) 
#repeat scrolling 10 times
for i in range(10):
    #scroll 1000 px
    driver.execute_script('window.scrollTo(0,(window.pageYOffset+1000))')
    sleep(3) 

response = requests.get(url)
soup = bs(response.text,'html.parser',from_encoding="UTF-8")

source_list = []
duration_list = []

#Scrape source of the video
vids_source = soup.findAll('div',attrs={'class':'yt-lockup-byline'})
for i in vids_source:
    source = i.text
    source_list.append(source)

#Scrape video duration
vids_badge = soup.findAll('span',attrs={'class':'video-time'})
for i in vids_badge:
    duration = i.text
    duration_list.append(duration)

1 Ответ

1 голос
/ 03 ноября 2019

Я думаю, что вы путаете requests и selenium. Модуль запросов может быть использован для загрузки и очистки без использования браузера. По вашему требованию, чтобы прокрутить вниз и получить больше результатов, используйте только Selenium и очищайте результаты, используя локаторы DOM, такие как XPATH.

source_list = []
duration_list = []
for i in range(10):
    #scroll 1000 px
    driver.execute_script('window.scrollTo(0,(window.pageYOffset+1000))')
    sleep(3)
    elements = driver.find_elements_by_xpath('//div[@class = "yt-lockup-byline"]')
    for element in elements:
        source_list.append(element.text)
    elements = driver.find_elements_by_xpath('//span[@class = "video-time"]')
    for element in elements:
        duration_list.append(element.text)

Поэтому мы сначала прокручиваем и получаем текст всех элементов. Прокрутите снова и получите все элементы снова и т. Д. Не нужно использовать requests при очистке, как это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...