Python之点到为止: 下载Youtube视频
作为一个新晋搬运UP主
能做的就是尽可能的保证“同步更新”!
注:以下内容可能会造成小白不适,请适当观看
需要准备得:
- Python
- requests
- BeautifulSoup
- youtube_dl
先分析下YouTube:
比如:油管上NBA视频,
https://www.youtube.com/user/NBA/videos
默认给出该用户最近上传的30个视频,往下拖动发现是瀑布流ajax加载数据
因为本教程只考虑最新的视频,老视频不考虑所以这个接口对我们来说意义不大
当然你如果想要爬YouTube全站就另说了。
紧接着看一下源代码,浏览器直接右键查看源代码就行了。
发现视频信息放在一个 script 的标签内 一个window下的变量内
随后有了如下代码:
import requests from bs4 import BeautifulSoup url = 'https://www.youtube.com/user/NBA/videos' proxies = { "http": "http://127.0.0.1:10086", "https": "http://127.0.0.1:10086", } res = requests.get(url, proxies=proxies) print(res.text.find('window["ytInitialData"]'))
运行之后输出的-1,竟然并没有找到这个 “window["ytInitialData"]” 这个字符串
用Postman调试了一下,发现如果请求头没有带 User-Agent ,就回给你返回一个完整的格式化好的html,就没有这些js数据了,其实也是可以使用 BeautifulSoup 直接进行格式化的。
只是之前找到了一个js的开头那就要继续下去。
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' 'AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/74.0.3702.0 Safari/537.36' } res = requests.get(url, proxies=proxies, headers=headers)
加上请求头之后,就可以找到那段js代码的位置了。
紧接着我们把重要的数据拿出来,
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' 'AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/74.0.3702.0 Safari/537.36' } res = requests.get(url, proxies=proxies, headers=headers)
分析过程不难,我们知道他将数据放入了 script 标签中,那就用BeautifulSoup取出所有 script 标签,一共有15个(可能不一样无所谓的),测试之后发现这段代码总在倒数第三个script 标签内,所以直接取 [-3].
第四行代码就是将实际的json数据取出来,其他的js代码我们不要
后两行为解析json数据并只将视频信息部分取出来
循环输出以下发现这个item里面存放了,视频ID、预览图、访问量等等等一些数据。
随后就回到了我们今天的主题,如何保证我们的视频是最新的。
拿到了最新的视频列表,就可以写个死循环定时得去爬取。
和原来的数组去对比,如果有差异那那个视频就是最新的。
根据视频ID,再利用 youtube_dl 就可以直接将视频下载到本地
youtube_dl ,也是用Python写的所以调用起来也非常方便
能实现得呢就是,定时爬取该用户上传得视频。
有更新得时候直接将视频和预览图下载到本地!
你只需要做的就是上传视频。没了
那么我就点到为止了
Just give a hint.
文章评论