搜索关键词采集YouTube视频字幕

优采云 发布时间: 2020-08-17 14:15

  搜索关键词采集YouTube视频字幕

  使用python采集YouTube视频字幕

  本篇博客纯干货!!!

  最近接到leader安排的采集任务,抓取采集世界上最大的视频共享网站YouTube的视频字幕。

  分析目标网站,开始抓包

  当我打开视频链接点击显示字幕按键时,通过浏览器抓取到timedtext这样的一个恳求,而返回的内容即将我想要的数据——每个时间点的字幕。

  

  分析该URL有视频ID、signature、key、expire等参数,每次发生变化的是signature,开始通过js突破该参数。过程这儿不做详尽描述。

  终于在该视频源代码中找到这样一段js

  "playerCaptionsTracklistRenderer\":{\"captionTracks\":[{\"baseUrl\":\"https:\/\/www.youtube.com\/api\/timedtext?xorp=True\\u0026signature=DC15F46CCF5A97B616CFF6EA13626BC34E24B848.454E61B37E4E1AE37BF2C83F311D8EB362B165AA\\u0026hl=zh-CN\\u0026sparams=caps%2Cv%2Cxoaf%2Cxorp%2Cexpire\\u0026expire=1566051203\\u0026caps=\\u0026key=yttt1\\u0026xoaf=1\\u0026v=7j0xuYKZO4g\\u0026lang=en\\u0026name=English\",

  原来仍然费尽心思想解析的URL曝露在源码中了,格式化代码后晓得他是一段json串,很多视频信息都在该json中,如发布时间、标题、简介、点击量等;心中的小兴奋?

  接下来,通过正则匹配须要的URL

  ytplayer_config = json.loads(re.search('ytplayer.config\s*=\s*([^\n]+?});', response.text).group(1))

caption_tracks = json.loads(ytplayer_config['args']['player_response'])['captions']['playerCaptionsTracklistRenderer']['captionTracks']

for c in caption_tracks:

url = c["baseUrl"] # 在url后拼接上&tlang=zh-Hans返回的字幕为中文,&tlang=en-Hans返回的字幕为英文

  最后得到字幕URL通过python恳求后解析领到字幕数据。大功告成

  有字幕的视频就会有baseUrl这个值,没有字幕的视频这样取会报异常的哦~

  

  YouTube列表翻页

  字幕解析下来了,下一步批量采集需要的视频字幕。

  需求:

  通过搜索采集结果中所有字幕。

  分析:

  视频翻页是基于ajax请求来的,源码里面的信息始终都是第一页的数据,

ok 那既然这样,我们来分析ajax请求,我喜欢用谷歌浏览器,打开开发者工具,network,来抓包。

鼠标一直往下拉,会自动请求,是个post请求,一看就是返回的视频信息。

  

  看到这儿很高兴,离胜利早已不远了。但,我们先来看下headers 以及发送的post参数,看了以后 就一句 wtf。。。

  

  一万个矮马在奔腾,我把这些加密的参数都标记了,前前端交互,既然是发过去的数据,那肯定早已在后端形成了,至于哪些形成的,那就要一步一步剖析来了,最后。对 我没有剖析下来。。。刚开始挨到挨查看js文件,参数的确是在js上面形成的,但。。。tmd写的很复杂了。。。能力有限,解决不了。难道就这样舍弃了吗。肯定不会,不然 各位也不会见到这篇文章了。于是,我灵机一动,在地址栏上面输入&page=结果,真的返回视频了。。。卧槽 哈哈哈,我当时真是很开心呢。因为后端页面上并没有翻页按键,没想到居然还真的可以这样翻页。。。哈哈

  

  接下来就是匹配每页的视频链接 – 访问 – 获取字幕

  完活 交差 回家 吃饭 睡觉咯

  感谢观看!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线