python爬虫下载网易有道精品课视频

Posted by ZMY on March 1, 2020

python爬虫下载网易有道精品课视频

背景

前端时间在网上报名了一个网易有道精品课英语学习的课程,起初是有一个试听课,感觉老师讲的很有意思,就报名交了学费。
课程分两部分,一部分是逻辑英语,一部分是死磕团。逻辑英语讲的是语法,死磕团是带你背单词。老钟的课程还是很有意思的,虽然有的地方可能不是那么有逻辑,
但通过生动或形象的比喻和联想加强记忆毕竟不是坏事,而且可以让自己有一个去记忆的尝试的方向,没有一个方法是适合所有人的,说不定他的方法可以给你带来一些灵感。
没有听过的课程可以看看我我文章最后分享的网址(强烈建议大家去花钱学,毕竟直播和视频还是有些不同的,而且你花钱了,积极性肯定高)
现在当时买的课程时间快到期了,想要再看视频和内容就需要续费了,但是网易有道精品课对于视频是有保护的,作为一个技术宅,当然是想通过自己的技术来减免这笔续费的,故而有了下面的教程

项目过程分解

  1. 通过python爬虫download视频
  2. 搭建nginx服务器
  3. 编写网页代码
  4. 百度云盘批量分享和视频md5修改

因为不是开发人员,是个小运维,只是平时对python比较感兴趣,因此代码中有很多无用的地方和基本没什么注释,尽情谅解

1. 通过python爬虫download视频

1.1 通过selenium模拟正常网站点击过程,保存视频网址和对应的视频名称

这里讲几个操作过程中需要注意的地方

  • 网易有道精品课的登陆方式是通过微信登陆,这就需要你先通过手机端扫码,验证通过后才能进入主页面。
  • 有时候首页登陆后会弹出一个广告,如遇到需要手动关闭(我实验的时候遇到了好几次)
  • 获取视频网址的时候,那个网页是新标签页,需要通过switch_to.window()方法跳转到新打开的标签页上才能获取到driver的内容
  • 视频播放点击后需要关闭,否则会弹出已在网站上有视频在播放(这个是有道精品课的限制)
  • 课程表页面下方的内容需要通过js脚本实现鼠标滚动才能点击
    js="window.scrollTo(0,400);"
              driver.execute_script(js)
    
  • 课程表最后一条进入学习的url获取后,需要表明,这是最后一条,退出循环,否则会跳到课程介绍页继续进行。
    elif count >= 79:
              break
    

    代码有点长,我已经上传了,下载地址get_video_url.py

1.2 通过requests加载获取到的cookie,下载视频

这里运用了zip函数将多个列表或元祖相对应的元素进行组合

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
import subprocess
import requests
import wget
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = Options()
#chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path="./chromedriver",chrome_options=chrome_options)
driver.get("https://ke.youdao.com/")
time.sleep(1)
driver.find_element_by_class_name('_1u03u').click()
time.sleep(2)
driver.find_element_by_class_name('_2TY2B').click()
time.sleep(15)
print("扫描二维码之后的url")
print(driver.current_url)
driver.find_element_by_class_name('_2GjXc').click()
print("点击我的课程之后的url")
print(driver.current_url)
result1,url_content=subprocess.getstatusoutput('cat video_url_list.txt')
result2,video_name_content=subprocess.getstatusoutput('cat video_name_list.txt')
url_list=url_content.split("\n")
video_name_list=video_name_content.split("\n")
url_to_name=zip(url_list,video_name_list)
url_to_name_list=[]
for i in url_to_name:
    url_to_name_list.append(list(i))

cookies=driver.get_cookies()
driver.close()
sess=requests.Session()
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063','Host':'stream.ydstatic.com','Referer':'http://live.youdao.com/live/index.html'}
for cookie in cookies:
    sess.cookies.set(cookie['name'],cookie['value'])
for i in url_to_name_list:
    url,name=i
    data=sess.get(url=url,headers=headers).content
    name=name.strip()
    newname=name+'.mp4'
    path='/Volumes/Untitled/有道精品课/'
    allname=path+newname
    with open(allname,'wb') as fp:
        fp.write(data)
        print("%s#####下载成功!" %newname)

代码下载download_video.py

2. ngnix服务器搭建

nginx服务器搭建过程很简单
共享目录默认位置:/usr/share/nginx/html/;配置文件/etc/nginx/nginx.conf nginx服务安装

yum install nginx

配置文件修改

vim /etc/nginx/nginx.conf
修改server中的listen对应的端口,我这里是9090

开机自启动

systemctl enable nginx

启动nginx服务

systemctl start nginx

3. 网页代码呈现

将需要的素材图片放在/usr/share/nginx/html/下面,html代码没啥难的地方,我都没学过,上网百度一下,也能弄个讲究看的网址
主要下面三个文件
index.html
逻辑英语.html
死磕团.html
其中index.html和逻辑英语.html是自己写的,死磕图完全是网站的源代码(死磕团的html页面除了测试的板块需要验证,其他板块只要知道网址,谁都可以看见…..)

4. 视频md5修改和百度云盘无密码批量分享

百度云盘对于视频是有限制的,你可以通过上传视频发现,有些视频上传的非常快,这是因为他有一个库,通过对md5值的比较去验证是否在库中已经存在你上传的视频,如果已经存在,你上传的视频的速度会很快(其实只是一个验证的过程,在你看来是上传过程),通过这个md5值的验证百度云对于一些视频是可以起到保护作用的,就拿有道精品课中的视频来说,这些视频一定是不让在网络上传播的,毕竟免费的东西,大家还是乐意去看的,我们通过md5值修改工具,修改这些视频的md5值,解决百度云盘的这一限制。
并且现在百度云盘好像不可以分享无密码的共享了,因此,这里大家也需要去下载个软件去解决这一问题
这俩软件大家百度查一下吧,我就不在这里列出了下载地址了
软件名:md5值批量修改器,bdmaster

有道精品课61.62班学习网址(鸟悄看哦)

访问网址:http://47.105.197.17:9090/
(死磕团中涉及到测试的需要注册后登录自己的账后方可访问,撸词直播中的视频回放看不了(当时忘了….囧,现在会员过期了,无法下载了))

版权如有侵权请与我联系

声明:本博客的原创文章,都是本人平时学习所做的笔记,转载请标注出处,谢谢合作。