Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.8上的Youtube搜索_Python_Python 3.x_Beautifulsoup_Youtube_Urllib - Fatal编程技术网

Python 3.8上的Youtube搜索

Python 3.8上的Youtube搜索,python,python-3.x,beautifulsoup,youtube,urllib,Python,Python 3.x,Beautifulsoup,Youtube,Urllib,我在youtube上搜索链接时遇到问题,我尝试了google api python客户端,以及转换为python3的示例代码,我尝试使用下面的代码,在pypi上托管的youtube搜索模块,我检查了关键api,结果不是她。代码返回一个我试图解决的bs4错误,当我解决它时,它返回一个空列表,没有链接 有人能告诉我一种在youtube上搜索并使用Python获取链接的方法吗? 非常感谢您的帮助,我正在使用Python 3.8.3和Windows 10 x86 youtube搜索模块: 示例代码:(P

我在youtube上搜索链接时遇到问题,我尝试了google api python客户端,以及转换为python3的示例代码,我尝试使用下面的代码,在pypi上托管的youtube搜索模块,我检查了关键api,结果不是她。代码返回一个我试图解决的bs4错误,当我解决它时,它返回一个空列表,没有链接

有人能告诉我一种在youtube上搜索并使用Python获取链接的方法吗? 非常感谢您的帮助,我正在使用Python 3.8.3和Windows 10 x86

youtube搜索模块:

示例代码:(Python2.x,我正在尝试转换为python3.x)

我的bs4和urllib代码:

import urllib.request
from bs4 import BeautifulSoup

textToSearch = 'hello world'
query = urllib.parse.quote(textToSearch)
url = "https://www.youtube.com/results?search_query=" + query
response = urllib.request.urlopen(url)
html = response.read()
soup = BeautifulSoup(html, 'html.parser')
print(soup.findAll(attrs={"class": "yt-uix-tile-link"}))

for vid in soup.findAll(attrs={'class':'yt-uix-tile-link'}):
    print('https://www.youtube.com' + vid['href'])

要从YouTube获得正确的响应,请设置正确的
User-Agent
HTTP头

例如:

import requests
from bs4 import BeautifulSoup


headers = {'User-Agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'}

textToSearch = 'hello world'
url = 'https://www.youtube.com/results'

response = requests.get(url, params={'search_query': textToSearch}, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')

print(soup.findAll(attrs={"class": "yt-uix-tile-link"}))
for vid in soup.findAll(attrs={'class':'yt-uix-tile-link'}):
    print('https://www.youtube.com' + vid['href'])
印刷品:

[<a aria-describedby="description-id-498021" class="yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-sessionlink spf-link" data-sessionlink="itct=CFsQ3DAYACITCLSOm7bRu-oCFQhO4AodS0kHqzIGc2VhcmNoUgtoZWxsbyB3b3JsZJoBAxD0JA" dir="ltr" href="/watch?v=Yw6u6YkTgQ4" rel="spf-prefetch" title="hello world">hello world</a>, <a aria-describedby="description-id-20311" class="yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-sessionlink spf-link" data-sessionlink="itct=CFoQ3DAYASITCLSOm7bRu-oCFQhO4AodS0kHqzIGc2VhcmNoUgtoZWxsbyB3b3JsZJoBAxD0JA" dir="ltr" href="/watch?v=al2DFQEZl4M" rel="spf-prefetch" title="Lady Antebellum - Hello World">Lady Antebellum - Hello World</a>, ...
https://www.youtube.com/watch?v=Yw6u6YkTgQ4
https://www.youtube.com/watch?v=al2DFQEZl4M
https://www.youtube.com/watch?v=OfaBZvvL_7M
https://www.youtube.com/watch?v=rOU4YiuaxAM
https://www.youtube.com/watch?v=MF5qMW6AIvo
https://www.youtube.com/watch?v=zeQTrWU1RlU&list=PLqq4LnWs3olU-bP2R9uD8YXbt02JjocOk
https://www.youtube.com/watch?v=mFrghyAyNTg
https://www.youtube.com/watch?v=82vOw3l2DmY
https://www.youtube.com/watch?v=GxPNprgqR48

... and so on.
[。。。
https://www.youtube.com/watch?v=Yw6u6YkTgQ4
https://www.youtube.com/watch?v=al2DFQEZl4M
https://www.youtube.com/watch?v=OfaBZvvL_7M
https://www.youtube.com/watch?v=rOU4YiuaxAM
https://www.youtube.com/watch?v=MF5qMW6AIvo
https://www.youtube.com/watch?v=zeQTrWU1RlU&list=PLqq4LnWs3olU-bP2R9uD8YXbt02JjocOk
https://www.youtube.com/watch?v=mFrghyAyNTg
https://www.youtube.com/watch?v=82vOw3l2DmY
https://www.youtube.com/watch?v=GxPNprgqR48
等等

有一个类似的模块可满足您的需求(同时支持异步和同步):

您可以通过以下方式使用它:

例子
从YouTube搜索Python导入视频搜索
videosSearch=videosSearch('NoCopyrightSounds',限制=2)
打印(videosSearch.result())
结果
{
“结果”:[
{
“类型”:“视频”,
“id”:“K4DyBUG242c”,
“标题”:“卡通-On&On(feat.Daniel Levi)[NCS发行版]”,
“发布时间”:“5年前”,
“持续时间”:“3:28”,
“视图计数”:{
“文本”:“389673774视图”,
“短”:“389M视图”
},
“缩略图”:[
{
“url”:”https://i.ytimg.com/vi/K4DyBUG242c/hqdefault.jpg?sqp=-OAYMWEJCOADEI4CSFRYQPaxuiaruaaaaaagaeladiqJ0agkjdeae=&rs=AOn4CLBkTusCwcZQlmVAaRQ5rH-mvBuA1g“,
“宽度”:480,
“高度”:270
}
],
“描述接头”:[
{
“文本”:“NCS:无限制音乐NCS Spotify:http://spoti.fi/NCS 免费下载/流媒体:http://ncs.io/onandon \u25bd连接到\u00a0…”
}
],
“频道”:{
“名称”:“NoCopyrightSounds”,
“id”:“UC_aEa8K-EOJ3D6gOs7HcyNg”,
“缩略图”:[
{
“url”:”https://yt3.ggpht.com/a-/AOh14GhS0G5FwV8rMhVCUWSDp36vWEvnNs5Vl97Zww=s68-c-k-c0x00ffffff-no-rj-mo“,
“宽度”:68,
“高度”:68
}
],
“链接”:https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
},
“无障碍”:{
“标题”:“卡通-On&On(feat.Daniel Levi)[NCS发行版]由NoCopyrightSounds于5年前制作,3分28秒389673774次浏览”,
“持续时间”:“3分28秒”
},
“链接”:https://www.youtube.com/watch?v=K4DyBUG242c",
“搁置”:空
},
{
“类型”:“视频”,
“id”:“yJg-Y5byMMw”,
“标题”:“战争-凡人(专长:劳拉·布雷姆)[NCS发布]”,
“发布时间”:“3年前”,
“持续时间”:“3:50”,
“视图计数”:{
“文本”:“153353801视图”,
“短”:“1.53亿次浏览”
},
“缩略图”:[
{
“url”:”https://i.ytimg.com/vi/yJg-Y5byMMw/hqdefault.jpg?sqp=-OAYMWEJCOADEI4CSFRYQPQPAXUIARUAAAAGAELADIQJ0AGKJDEAE=&rs=AOn4CLDY-MVE79IWERMO-71AsKEIB1m0A“,
“宽度”:480,
“高度”:270
}
],
“描述接头”:[
{
“文本”:“NCS:无限制音乐NCS Spotify:http://spoti.fi/NCS 免费下载/流媒体:http://ncs.io/mortals 连接到NCS:\u00a0…”
}
],
“频道”:{
“名称”:“NoCopyrightSounds”,
“id”:“UC_aEa8K-EOJ3D6gOs7HcyNg”,
“缩略图”:[
{
“url”:”https://yt3.ggpht.com/a-/AOh14GhS0G5FwV8rMhVCUWSDp36vWEvnNs5Vl97Zww=s68-c-k-c0x00ffffff-no-rj-mo“,
“宽度”:68,
“高度”:68
}
],
“链接”:https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg"
},
“无障碍”:{
“标题”:“战争-凡人(壮举,劳拉·布雷姆)[NCS发行版]由NoCopyrightSounds于3年前制作,3分50秒153353801次浏览”,
“持续时间”:“3分50秒”
},
“链接”:https://www.youtube.com/watch?v=yJg-Y5byMMw“,
“搁置”:空
}
]
}

此库的搜索结果非常详细。

还有另一个模块。Searchtube

pip install searchtube
from searchtube import Search
print(Search('hello',filter='udlh').results

除其他模块外,此模块还包含筛选选项。请尝试一下。有关详细信息,请参见

这是如何实现的,以在最近一小时内从搜索结果中获取链接

from youtubesearchpython import *

customSearch = CustomSearch('Your Keyword Here', VideoUploadDateFilter.lastHour, limit = 20)

for i in range(20):
    print(customSearch.result()['result'][i]['link'])

仅供参考:

此URL不再处于活动状态。