requestsとBeautifulsoup4だけを使ったシンプルな検索です。
使いかた
Y = Youtube([query], result=[num])
queryは検索単語です。日本語対応。
numは検索結果数です。ページネーションの関係で現時点で最大20。ここら辺は各自でいじってくだしあ。
Y.url >> 検索結果のurlリスト
Y.title >> タイトルリスト
Y.id >> IDリスト(ID?っていうの?JaDJbrwi0gkみたいな固有番号)
Y.embed >> 貼り付け用urlリスト
Y.time >> 再生時間リスト(需要ないかも)
例)
print(Youtube("アンジャッシュ",result=5).url)
>> ['https://www.youtube.com/watch?v=JaDJbrwi0gk', 'https://www.youtube.com/watch?v=yGPAyqxrado', 'https://www.youtube.com/watch?v=tGl2Dp1v0gw', 'https://www.youtube.com/watch?v=myp35PyYk1A', 'https://www.youtube.com/watch?v=Tt1rkp3h1pM', 'https://www.youtube.com/watch?v=XIJqsqOCorw']
Y.select() >> 検索結果から1つ選択し、上記の情報について辞書を返します。
key = "url","title","id","embed","time"
例)
movie = Y.select()
print(movie["url"]) >> https://www.youtube.com/watch?v=JaDJbrwi0gk
他のダウンロードAPIとかと組み合わせると効率いいかも。
スクリプト
import requests
from bs4 import BeautifulSoup
class Youtube():
def __init__(self,query,result=10): # max20まで
search_url = "https://www.youtube.com/results?search_query=" + query
req = requests.get(search_url)
soup = BeautifulSoup(req.text.encode(req.encoding).decode('utf-8','strict'),"html5lib")
h3s = soup.find_all("h3", {"class":"yt-lockup-title"})[0:result+1]
self.data = [h3 for h3 in h3s]
self.url = ["https://www.youtube.com" + h3.a.get('href') for h3 in h3s]
self.title = [h3.a.get("title") for h3 in h3s]
self.id = [h3.a.get("href").split("=")[-1] for h3 in h3s]
self.embed = ["https://www.youtube.com/embed/" + h3.a.get("href").split("=")[-1] for h3 in h3s]
self.time = [h3.span.text.replace(" - 長さ: ","").replace("。","") for h3 in h3s]
self.info = [h3.text for h3 in h3s] # >>タイトル - 長さ:00:00。
def select(self):
values = {"url":self.url,"title":self.title,"id":self.id,"embed":self.embed,"time":self.time}
info = self.info
for i in range(len(info)):
print("%s:%s" % (i,info[i]))
while True:
try:
num = int(input("番号:"))
break
except:
print("番号を正しく入力してください。")
results = {
"url":values["url"][num],
"title":values["title"][num],
"id":values["id"][num],
"embed":values["embed"][num],
"time":values["time"][num],
}
return results
if __name__ == '__main__':
Y = Youtube(input("検索ワード:"),result=5)
movie = Y.select()
print(movie["url"])