实验对象:麦子学院html
一、大部分视频信息都存在http://www.maiziedu.com/course/all/中,全部的视频信息都有本身的ID,第一次查询地址应该是在:'http://www.maiziedu.com/course/' + id中python
分析页面获取title ,为建立文件夹获取目录app
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和titleless
这一部分就是进行分析,获取到页面全部章节的地址和标题ide
在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
二、播放页面分析页面播放路径是从js中明文调用的,直接获取网站的title及视频调用的js文件中的url路径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是为了保存文件时,按照网站显示内容进行重命名。三、下载文件
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 在命令行显示下载进度spa
urlretrieve进行下载,也能够使用其余方式命令行
总结:code
使用urlib+bs4直接粗暴的下载麦子视频文件,有许多不如意的地方须要改进,因版权缘由,不在此贴出源码