【问题标题】:i'm trying to return link of the first youtube video in search results using python我正在尝试使用 python 在搜索结果中返回第一个 youtube 视频的链接
【发布时间】:2023-03-29 01:17:01
【问题描述】:

我已经尝试了所有我能想到的方法。我不想为此使用 Selenium,但是我使用 Selenium 的代码有效,但我无法让它与 BeautifulSoup 一起使用。

我还尝试在以下代码中使用 youtube_dl:

def get_addr(query):
    file = open('filename.txt', 'w')
    file.truncate(0)
    file.close()

    a = os.system(f"youtube-dl --get-url 'ytsearch:{query.replace(' ','+')}'> filename.txt")

    with open('filename.txt', 'r') as file:
        output = file.read(100)
    return output

确实有效的 SELENIUM 代码:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep

DOWN_PATH = r"C:\Users\91880\Music"

driver= webdriver.Chrome(ChromeDriverManager().install())

song_list = []
for song in song_list:
    driver.get('https://www.youtube.com/results?search_query={}'.format(song.replace(' ','+')))
    s = driver.find_element_by_id('video-title')
    print(s.text, s.get_attribute("href"), '', sep='\n')

【问题讨论】:

  • 你最好使用youtube api而不是尝试解析网站

标签: python beautifulsoup youtube href


【解决方案1】:

这不是一个完整的答案,但它可以帮助您入门。
请求 youtube 时,它​​要求您按接受 cookie,因此我们必须为请求设置一个 cookie,表明我们已经接受了 cookie。然后你必须在 javascript 执行后请求它,否则视频将不存在

import requests
from bs4 import BeautifulSoup

def findYT(search):
    search_param = {'search_query': search}
    search_result = requests.get('https://www.youtube.com/results', params=search_param, cookies={'CONSENT': 'YES+42'}).text
    # Just writes to a temp file so you can inspect the code 
    with open("tmp.txt", "w") as f:
        f.write(search_result)
        f.close()

   
    #link = "https://www.youtube.com" + videos[0]["href"]

findYT("test")

如果您仔细查看代码生成的 tmp.txt,您会发现脚本标签内有一些 json。您可以通过搜索“手表?”找到它。在那里,您将找到搜索参数中的所有视频链接。现在你只需要找到一种方法来获取该 json 并获取正确的 url。

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2020-11-23
    相关资源
    最近更新 更多