python - 如何使用谷歌 API 每天从 youtube 上抓取 10k 条记录
问题描述
我正在使用 Google api 使用 YouTube v3 从 YouTube 抓取数据。根据搜索关键字,我正在尝试抓取诸如likescount
,viewscount
等数据dislikescount
。
问题是默认情况下我们最多可以获取 50 条记录。我需要获取更多记录,我们可以通过使用分页来实现。
2019 年 1 月 11 日,Google 的记录从每天 100 万条减少到 10K 条。要每天请求 10k 条记录,我们需要进行分页,但我不确定如何在我的代码中设置分页。
from apiclient.discovery import build
import argparse
import csv
import unidecode
DEVELOPER_KEY = "xxxxxxx"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
def youtube_search(options):
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY)
search_response = youtube.search().list(q=options.q,part="id,snippet",maxResults=options.max_results).execute()
videos = []
channels = []
playlists = []
csvFile = open('checking_for_no_of_records.csv','w')
csvWriter = csv.writer(csvFile)
csvWriter.writerow(["title","videoId","viewCount","likeCount","dislikeCount", "commentCount","favoriteCount"])
for search_result in search_response.get("items", []):
if search_result["id"]["kind"] == "youtube#video":
title = search_result["snippet"]["title"]
title = unidecode.unidecode(title)
videoId = search_result["id"]["videoId"]
video_response = youtube.videos().list(id=videoId,part="statistics").execute()
for video_result in video_response.get("items",[]):
viewCount = video_result["statistics"]["viewCount"]
if 'likeCount' not in video_result["statistics"]:
likeCount = 0
else:
likeCount = video_result["statistics"]["likeCount"]
if 'dislikeCount' not in video_result["statistics"]:
dislikeCount = 0
else:
dislikeCount = video_result["statistics"]["dislikeCount"]
if 'commentCount' not in video_result["statistics"]:
commentCount = 0
else:
commentCount = video_result["statistics"]["commentCount"]
if 'favoriteCount' not in video_result["statistics"]:
favoriteCount = 0
else:
favoriteCount = video_result["statistics"]["favoriteCount"]
csvWriter.writerow([title,videoId,viewCount,likeCount,dislikeCount, commentCount,favoriteCount])
csvFile.close()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--q', help='Search term', default='Google')
parser.add_argument('--max-results', help='Max results',default = 50)
args = parser.parse_args()
youtube_search(args)
使用上面的代码,我只能获得 50 条记录,但我每天需要获得 10K 条记录。
解决方案
推荐阅读
- javascript - JavaScript 读取文本文件返回未定义
- javascript - 为什么 API 数据显示在本地主机而不是发布站点?
- c++ - 为 char 数组适配 zlib zpipe
- python - pandas.loc 计算中的错误 - 切片数据帧的副本
- c# - 如何在 DataSourceProvider 中获取基础数据 - C#
- css - 字体大小与变换比例 - 有什么区别?
- vue.js - 为什么我在 Netlify 上的 Nuxt 站点部署失败并出现致命错误:未找到模块?
- visual-studio - CLion 相当于 Visual Studio C++“过滤器”
- ios - 如何在堆栈视图中设置按钮的宽度
- c# - ProjectInstaller 安装的 WCF Windows 服务无法处理 POST 请求