实验对象: 麦子学院
1, 大部分视频信息都存在 http://www.maiziedu.com/course/all/ 中, 所有的视频信息都有自己的 ID, 第一次查询地址应该是在:'http://www.maiziedu.com/course/' + id 中
分析页面获取 title , 为创建文件夹获取目录
- url_dict1 = {}
- url = 'http://www.maiziedu.com/course/{}'.format(num)page = urllib.request.urlopen(url)
- context = page.read().decode('utf8')
- title = re.search('<title>.*</title>', context)
- title = title.group().strip('</title>')if '500' in title:return {}else:
- #对文件夹进行进一步的精简 if (len(title.split(":")) != 1):
- title = title.split(":")[1]
- title=title.split('-')[0]
- url_dict1['url'] = url
- url_dict1['title'] = title
- # urls.append(url_dict1)return url_dict1
获取字典包含 url 和 title
这一部分就是进行分析, 获取到页面所有章节的地址和标题
在 python 代码中用 bs4 分析并获取播放页面链接
- urls = []
- page = urllib.request.urlopen(url)
- context = page.read().decode('utf8')
- soup = BeautifulSoup(context, "html.parser")
- for tag in soup.find('ul', class_='lesson-lists').find_all('li'):
- urls.append(tag.find('a').get('href').split('/')[-2])return urls
返回所有章节的 url 和 title
2, 播放页面分析页面播放路径是从 js 中明文调用的, 直接获取网站的 title 及视频调用的 js 文件中的 url 路径
- page = urllib.request.urlopen(url)
- context = page.read().decode('utf8')
- soup = BeautifulSoup(context, "html.parser")
- title = soup.find('div', class_='bottom-module').find_all('span', class_='title')[0]
- title = re.compile(r'<[^>]+>', re.S).sub('', str(title)) +'.mp4'ok = soup.find_all('script')[2]return ok.string.split('"')[-2], title
此处获取 title 是为了保存文件时, 按照网站显示内容进行重命名. 3, 下载文件
- def report(count, blockSize, totalSize):
- j = '#'
- percent = int(count * blockSize * 100 / totalSize)sys.stdout.write(str(percent) + '% [' + j * int(percent / 2) + '->' + "]\r")sys.stdout.flush()def download(url, filename):
- # BASE_DIR = os.path.split(os.path.realpath(__file__))[0]
- saveFile = os.path.join(BASE_DIR, filename)if not os.path.exists(saveFile):
- urllib.request.urlretrieve(url, saveFile, reporthook=report)sys.stdout.write("\n\rDownload complete, saved as %s" % (saveFile) + '\n\r')sys.stdout.flush()else:print('文件已存在! 跳过继续下载下一个')
report 在命令行显示下载进度
urlretrieve 进行下载, 也可以使用其他方式
总结:
使用 urlib+bs4 直接粗暴的下载麦子视频文件, 有许多不如意的地方需要改进, 因版权原因, 不在此贴出源码
来源: http://blog.51cto.com/5353088/2105330