先决条件: 美丽组合
YouTube 频道的 YouTube 统计数据可以用于分析,也可以使用 python 代码提取。可以检索许多数据,如视图计数、订阅计数和视频计数。本文讨论了两种方法。
方法一:使用 YouTube API
首先,我们需要生成一个应用编程接口密钥。您需要一个谷歌帐户来访问谷歌应用编程接口控制台,请求一个应用编程接口密钥,并注册您的应用程序。你可以使用谷歌 API页面进行操作。
为了提取数据,我们需要我们想要查看其统计数据的 YouTube 频道的频道 id。要获取频道 id,请访问特定的 YouTube 频道并复制网址的最后一部分(在下面给出的例子中,使用了极客频道的频道 id)。
接近
- 首先创建 youtube_statistics.py
- 在这个文件中使用 YTstats 类提取数据并生成一个 json 文件将所有的数据提取出来。
- 现在创建 main.py
- 在主导入 youtube_statistics.py 中
- 添加应用编程接口密钥和通道标识
- 现在使用第一个文件,对应于给定密钥的数据将被检索并保存到 json 文件中。
示例:
main.py 文件的代码:
Python 3
from youtube_statistics import YTstats
# paste the API key generated by you here
API_KEY = "AIzaSyA-0KfpLK04NpQN1XghxhSlzG-WkC3DHLs"
# paste the channel id here
channel_id = "UC0RhatS1pyxInC00YKjjBqQ"
yt = YTstats(API_KEY, channel_id)
yt.get_channel_statistics()
yt.dump()
【youtube _ statistics.py 文件代码:
Python 3
import requests
import json
class YTstats:
def __init__(self, api_key, channel_id):
self.api_key = api_key
self.channel_id = channel_id
self.channel_statistics = None
def get_channel_statistics(self):
url = f'https://www.googleapis.com/youtube/v3/channels?part=statistics&id={self.channel_id}&key={self.api_key}'
json_url = requests.get(url)
data = json.loads(json_url.text)
try:
data = data["items"][0]["statistics"]
except:
data = None
self.channel_statistics = data
return data
def dump(self):
if self.channel_statistics is None:
return
channel_title = "GeeksForGeeks"
channel_title = channel_title.replace(" ", "_").lower()
# generate a json file with all the statistics data of the youtube channel
file_name = channel_title + '.json'
with open(file_name, 'w') as f:
json.dump(self.channel_statistics, f, indent=4)
print('file dumped')
输出:
方法二:使用美容套装
美丽的汤是一个 Python 库,用于从 HTML 和 XML 文件中提取数据。在这种方法中,我们将使用“美丽组”和“Selenium”从 YouTube 频道中抓取数据。这个程序会告诉你视频的视图、发布时间、标题和网址,并使用 Python 的格式打印出来。
接近
- 导入模块
- 提供要获取其数据的通道的 url
- 提取数据
- 显示提取的数据。
示例:
Python 3
# import required packages
from selenium import webdriver
from bs4 import BeautifulSoup
# provide the url of the channel whose data you want to fetch
urls = [
'https://www.youtube.com/channel/UC0RhatS1pyxInC00YKjjBqQ'
]
def main():
driver = webdriver.Chrome()
for url in urls:
driver.get('{}/videos?view=0&sort=p&flow=grid'.format(url))
content = driver.page_source.encode('utf-8').strip()
soup = BeautifulSoup(content, 'lxml')
titles = soup.findAll('a', id='video-title')
views = soup.findAll(
'span', class_='style-scope ytd-grid-video-renderer')
video_urls = soup.findAll('a', id='video-title')
print('Channel: {}'.format(url))
i = 0 # views and time
j = 0 # urls
for title in titles[:10]:
print('\n{}\t{}\t{}\thttps://www.youtube.com{}'.format(title.text,
views[i].text, views[i+1].text, video_urls[j].get('href')))
i += 2
j += 1
main()
输出