Python 如何提取Selenium搜索Youtube时得到的每个视频的所有视图数?

Python 如何提取Selenium搜索Youtube时得到的每个视频的所有视图数?,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我想要什么: view_counts: 104M views view_counts: 104M views view_counts: 104M views view_counts: 104M views view_counts: 104M views view_counts: 104M views view_counts: 104M views view_counts: 104M views view_counts: 104M views view_counts: 104M views vie

我想要什么:

view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
104M views
  • 能够在youtube搜索结果页面上提取selenium生成的每个视频的所有视图
  • 例如:如果我在youtube上搜索“Imagine Dragons的信徒”,它会给出所有结果视频的浏览量(比如-1.04亿次浏览、15亿次浏览、6.98亿次浏览等),比如说前20个视频
我尝试过的

from selenium import webdriver

driver=webdriver.Chrome(executable_path='C:\\ProgramData\\chocolatey\\bin\\chromedriver.exe')
search = 'Believer from Imagine Dragons'
driver.get("https://www.youtube.com/results?search_query=" + search)

main = driver.find_elements_by_id("metadata")
for datas in main:
    info = datas.find_elements_by_id("metadata-line")
    for views in info:
        view_counts = views.find_element_by_xpath("""//*[@id="metadata-line"]/span[1]""")
        print('view_counts: ' + str(view_counts.text))
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Chrome(executable_path='C:\\ProgramData\\chocolatey\\bin\\chromedriver.exe')
search = 'Believer from Imagine Dragons'
driver.get("https://www.youtube.com/results?search_query=" + search)


main = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "metadata"))
)

data = main.find_elements_by_id("metadata-line")

for datas in data:
    views = datas.find_element_by_xpath("""//*[@id="metadata-line"]/span[1]""")
    print(views.text)
此文件的输出:

view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
104M views
我也尝试过的

from selenium import webdriver

driver=webdriver.Chrome(executable_path='C:\\ProgramData\\chocolatey\\bin\\chromedriver.exe')
search = 'Believer from Imagine Dragons'
driver.get("https://www.youtube.com/results?search_query=" + search)

main = driver.find_elements_by_id("metadata")
for datas in main:
    info = datas.find_elements_by_id("metadata-line")
    for views in info:
        view_counts = views.find_element_by_xpath("""//*[@id="metadata-line"]/span[1]""")
        print('view_counts: ' + str(view_counts.text))
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Chrome(executable_path='C:\\ProgramData\\chocolatey\\bin\\chromedriver.exe')
search = 'Believer from Imagine Dragons'
driver.get("https://www.youtube.com/results?search_query=" + search)


main = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "metadata"))
)

data = main.find_elements_by_id("metadata-line")

for datas in data:
    views = datas.find_element_by_xpath("""//*[@id="metadata-line"]/span[1]""")
    print(views.text)
此文件的输出:

view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
104M views
但是,他们都没有给我想要的。请帮忙

未来目标(如果您能提供帮助):

view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
view_counts: 104M views
104M views
  • 能够播放该页面上具有最高浏览量的视频
要从每个
中提取文本(例如,文本),您必须对位于()的所有元素进行
可见性诱导,并且您可以使用以下任一方法:

  • 使用
    CSS\u选择器
    get\u属性(“innerHTML”)

  • 使用
    XPATH
    和文本属性:

    driver.get("https://www.youtube.com/results?search_query=Believer%20from%20Imagine%20Dragons")
    print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@id='metadata-line']/span[@class='style-scope ytd-video-meta-block' and contains(., 'views')]")))])
    
  • 控制台输出:

    ['1.5B views', '104M views', '32M views', '93M views', '98M views', '2.3M views', '39M views', '26M views', '1.4B views', '9.6M views', '6.7M views', '748K views', '1.3B views', '11M views', '84M views', '51M views', '13M views', '18M views', '197M views', '7.2M views', '79K views', '3.5M views']
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

奥特罗 链接到有用的文档:

  • 方法
    获取元素的给定属性或属性。
  • 属性返回元素的文本。

  • @TejasDhanani很高兴能够帮助您!!!你能用你的新要求提出一个新问题吗?