YouTube视频爬虫-批量采集-低成本解决方案-技术难点和细节回顾

优采云 发布时间: 2020-08-22 15:40

  YouTube视频爬虫-批量采集-低成本解决方案-技术难点和细节回顾

  提供另一种形式的采集《 youtube批量采集-低成本解决方案-2》

  背景:对于我们那些国外玩家而言,实现youtube视频爬虫和批量采集有先天性的遗憾。起初,公司须要一大批的youtube视频,时长3分钟左右,720p下载的话,每视频30-50M左右。公司雇了一大批人,采购科学上网利器手工下载 ,无奈,效率之低令人发指。所以老总要我做爬虫手动采集,需求每晚下载2000+个视频,视频储存须要提升国外访问速率,方便合作方的程序抓取我们的内容。

  需求来了,接招

  第一步,盲人摸街:

  分析了一下需求,需要解决的技术节点就三个

  1.输入一个youtube创作主页面链接,输出该创作主发布的所有视频,包括此视频封面、标题、播放页链接

  针对第一点,首要解决的是访问内网,有两种选择,国外vps和直接订购坐落加拿大云主机。在选择之前,首先要清楚的是,我们每晚的下载流量差不多60-80G。而vps的免费流量有限,无法达到需求,云主机按带宽订购,流量没有限制,出于成本考虑,选择云主机。

  从财务领了90块钱买了腾讯云坐落莱比锡的一台海外云主机一个月,1G1核1M带宽,够用了。至于为何买腾讯云的呢?其实我们的合作方就是tx,习惯性到了腾讯云,价格比较一下无甚差异,此外出于对第3点的考虑,存储时可以用腾讯云对象存储,抓取效率其实会有增益。

  登陆云主机第一件事情,ping ,可是糟糕了,无应答。怎么回事?看了一下对应ip地址,有点问题,应该是dns的锅,看一下/etc/resolv.conf,问题果然出在这里,腾讯云海外云主机默认使用腾讯云dns服务,这如何能行(我猜想,原因无外乎两点,1.腾讯云团队的系统镜像制做问题2.或许是法律法规缘由)不过也没关系,手动更改,直接换google的dns。测试,访问成功。

  接下来,youtube爬虫。youtube页面动态加载,采集这块不想花费太多时间,而且对速率要求不高,每天需求才2k,所以直接python+selenium+phantomjs,模拟浏览器翻页,把某创作主的所有视频爬到手,存到数据库。不一会,第一个技术节点早已轻松解决!

  2.输入一个youtube视频播放页链接,输出一个视频,mp4格式

  这块稍微花了一些时间,原因是希望找到一种提供api的可以直接获取一个下载链接的形式,这样也许可以节省储存成本。google搜索youtube download,有很多第三方网站可以输入一个链接,设置分辨率之后直接下载,但是很抱歉,并没有一家提供api的。

  紧接着,去看了Youtube API,由于没有英文文档,颤抖着读完了英语文档,youtube也没有下载的api,不过,我也发觉了一些不错的功能,比如可以通过作者name,或者频道id直接获取播放列表,然后领到视频详情,这样,爬虫或许是有办法使用Youtube API来实现的,在后续的功能降低中,youtube API也帮了忙,比如在我们的视频初审页面加一个youtube源地址播放,在页面嵌入youtube提供的代码就实现了。

  最终,还是选用了强大的youtube-dl,我们的1M带宽渣渣配置,youtube视频下载速率平均可以达到1.3M/s以上。这样算下来,这样的配置我们就可以实现每晚2k+视频的下载需求了。下载需求解决了,视频储存迫在眉睫。

  3.输入一个mp4格式的视频,输出一个国外可以轻松下载的链接

  视频储存的难点在于,需要在海外就近解决的同时,对国外网路的下载速率不至于很低。使用腾讯云在慕尼黑地区的对象储存测试,国内下载速率基本满意。本来希望在一台服务器一边下载一边上传,但是问题来了,上传进程显示上传速率奇慢无比,半小时传一个30M视频。很吃惊,但突然之间我也意识到了问题所在。之前为了解决内网访问,我们替换了腾讯云的dns服务,这也意味着腾讯云在海外的数据中心应当是一个庞大的网路,本来可以就近访问,却活生生绕了巨大的一个圈子!

  但是我们还不可以变动这台服务器的网路环境,索性,再搞一台。又和财务领了90块钱,同县买了一台同等配置的服务器,单独作为上传服务。在不更换dns的情况下,文件上传速率果然太喜人,是下载速率的5倍以上,这也意味着,假如我们的需求扩充到每晚1w个视频,我们只须要再有4倍的下载性能就解决了,所有的下载的视频都推给上传服务去解决。

  由于两台机器处在同一公网,我配置两台机器ssh免密钥登录,这样就可以使用内网ip在两台机器之间复制文件(哈哈哈,之前搭Hadoop集群的时侯刚好做过),速度很快!秒传!600M的文件,1s搞定。

  到此,第三个技术点也解决了。

  第二步,实现

  说来说去,无非是把里面三个点串上去,形成一个链条就OK。

  第三部,跑起来

  跑了三天,下载并储存了2533个视频,使用显存75G。

  我的收获

  短短几天,这样一个项目出来,

  首先、公司每个月在服务器加储存方面的成本在500RMB以内,效率大幅度提高,省去好多人员薪资成本。我为公司创造了不小的价值!

  其次、我对于海外网路环境下的开发积累了一定的经验,对于YouTube API做了好多了解,认识了youtube-dl这个利器!

  写在最后

  我相信,看到这篇文章的差不多都是搞搬运的,好自为之。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线