создание Python словаря из N элементов из поиска на YouTube с использованием Selenium - PullRequest
0 голосов
/ 06 мая 2020

Итак, я пытаюсь использовать Selenium для создания словаря из N элементов видео на YouTube с их просмотрами из поиска на YouTube. например: {'videourl01': 521, 'videourl02': 782} и да, ключом будет URL-адрес видео, а индексом будет количество просмотров, и всего будет N видео.

После перехода на страницу поиска и проведения поиска, какие должны быть следующие шаги для этого.

Любая помощь приветствуется:>

пока удалось получить все метки видео :

    def GetTopVideosfromSearch(self,query,N):
    query = query.replace(' ', '+')
    self.browser.get('https://www.youtube.com/results?search_query='+query)
    vids=self.browser.find_elements_by_id('video-title')
    for vid in vids[0:N]:
        print((vid.get_attribute("aria-label")))

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Раньше я использовал Selenium, но для анализа других веб-сайтов.

Прежде всего, вам нужно сгенерировать контент, поскольку, скорее всего, YouTube использует ajax.

Это может быть достигнуто с помощью:

Keys.PAGE_DOWN

После того, как вы сгенерировали контент, вы должны искать в полученном html элементе, который вы ищете.

В моем случае я искал цену:

browser.find_elements_by_class_name("product-info-price")

Когда он у вас есть, вы можете перебирать его, как al oop, и добавлять результаты в словарь:

Вот полный фрагмент:

# imports
import pandas as pd
import requests
import time
import selenium
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

link = "https://es.wallapop.com/search?catIds=12461&dist=400&publishDate=any"
browser = webdriver.Chrome()
browser.get(link)
time.sleep(1)
body = browser.find_element_by_tag_name("body")
element = browser.find_element_by_class_name('Button')
browser.execute_script("arguments[0].click();", element)

# generate content, scrolling down the webpage
for _ in range(10):
    body.send_keys(Keys.PAGE_DOWN)
    time.sleep(0.1)

# iterate over the elements and append to the list
list_of_prices = []
for price in browser.find_elements_by_class_name("product-info-price"):
    list_of_prices.append(price.text)
0 голосов
/ 06 мая 2020

Нашел решение, которое у меня работает

    def GetTopVideosfromSearch(self,query,N):
    query = query.replace(' ', '+')
    self.browser.get('https://www.youtube.com/results?search_query='+query)
    for _ in range(N-4):
        self.browser.find_element_by_tag_name("body").send_keys(Keys.PAGE_DOWN)
        time.sleep(0.1)
    vids=self.browser.find_elements_by_id('video-title')
    vidsDict={}
    for vid in vids[0:N]:
        tmp = vid.get_attribute("aria-label")
        tmp=tmp[::-1]
        s=0
        views=''
        for t in tmp:
            if t==' ':
                s+=1
            if s==1 and t!=' ' and t!=',':
                views+=t
        views=int(views[::-1])   
        vidsDict[vid.get_attribute("href")] = views
    return vidsDict
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...