import requests
import base64
from Crypto.Cipher import AES
from urllib.parse import urlparse
import pandas as pd
import os
import time
headers = {
"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
}
class Downloader(object):
def __init__(self, file_name, file_path, file_url, decode_key):
self.file_name = file_name
self.file_url = file_url
self.host = self.parse_host(file_url)
if not os.path.exists(file_path):
os.makedirs(file_path)
self.key = base64.b64decode(decode_key)
self.file_path = os.path.join(file_path, file_name + '.mp4')
self.cryptor = AES.new(self.key, AES.MODE_CBC, self.key)
@staticmethod
def parse_host(url):
parsed_uri = urlparse(url)
result = '{uri.scheme}://{uri.netloc}'.format(uri=parsed_uri)
return result
def download(self):
# 获取mp4文件
res = requests.get(self.file_url, headers=headers)
content = res.content.decode()
urls = [self.host + line for line in content.splitlines() if '.ts' in line]
with open(self.file_path, 'wb') as f:
for url in urls:
res = requests.get(url, headers=headers)
if res.status_code == 200:
try:
content = self.cryptor.decrypt(res.content)
except Exception as e:
print("error: %s, will sleep 10 seconds and retry" % e)
time.sleep(10)
content = self.cryptor.decrypt(res.content)
f.write(content)
print("downloaded : %s" % url)
else:
raise Exception("failed !!!")
def prepare_courses():
files = [f for f in os.listdir(os.getcwd()) if f.endswith('csv')]
all_course = []
for file in files:
course_folder = file.replace('.csv', "")
if not os.path.exists(course_folder):
os.mkdir(course_folder)
df = pd.read_csv(file)
df.columns = ["file_path", "file_name", "decode_key", "file_url"]
df.file_path = course_folder + "/" + df.file_path
courses = df.to_dict(orient='records')
all_course.extend(courses)
return all_course
if __name__ == '__main__':
courses = prepare_courses()
for course in courses:
downloader = Downloader(**course)
downloader.download()
材料:
目录 | 课程 | 密码 | 链接 |
药理学(1-3节) | 第01讲 绪 言 | WnvmZg0vl6Qm6GzLk37k1A== | |
药理学(1-3节) | 第02讲 药物—药效学、药动学(一) | FXQPaUia5IDfBmIWnAaMLQ== | |
药理学(1-3节) | 第03讲 药动学(二) | 8DrM906Wvw1KnA3VxRMpHQ== | |
药理学 第4-9节 | 第01讲 传出神经系统药理概论 | qJIzrk0gTKYOFT9Sx1wZNQ== | |
药理学 第4-9节 | 第02讲 肾上腺素受体激动药 | Tuv1zvFO8mqOc6xVCvgphg== | |
药理学 第10-17节 | 第01讲 中枢神经系统药物(一) | Ct0rZOYP9dTAbC1182XmuQ== | |
药理学 第10-17节 | 第02讲 中枢神经系统药物(二) | HI/2RRBTs2ltoNFQMVJL2Q== | |
药理学 第10-17节 | 第03讲 第十四节 治疗老年痴呆药 | 8wladI0Pa3TJJgk3oGcBuA== | |
药理学 第18-21节 | 第01讲 抗心律失常药、抗心力衰竭药 | WYpYjU+LfNSGtyqOrQLN1Q== | |
药理学 第18-21节 | 第02讲 抗心绞痛药及调血脂药、抗高血压药 | CnT5lChf4+1YTdLvpo5fIA== | |
药理学 第22-23节 | 01讲 利尿剂与血液用药 | geENoWc1siBR4WJKcZeDPA== | |
药理学 24-26节 | 第01讲 消化系统药、呼吸系统药、抗组胺药 | o1Fn6G7G7kFNcf0HILQxnQ== | |
药理学 27-32节 | 第01讲 第二十七节 作用于子宫平滑肌 | FdSokXcpltbQHCYeTLpYRg== | |
药理学 27-32节 | 第02讲 第三十节 甲状腺激素与 | ASHmWzr36/bDwBSKHIhw8g== | |
药理学 33-46节 | 第01讲 抗微生物药物概论、喹诺酮类 | /X/rFWLMwLfwR6QOR7ppxg== | |
药理学 33-46节 | 第02讲 第三十五节 β内酰胺类抗生素 | c2HrW5p4Z9JwCpK/sijoEw== | |
药理学 33-46节 | 第03讲 第三十五节 β内酰胺类抗生素~ | WIlYKqzE3MwTkG1nXRJtZA== | |
生物药剂学专题一 | 第01讲 第一节 生物药剂学概述 | j9yPXn5kSf6Bns6nWOLFRQ== | |
生物药剂学专题一 | 第02讲 生物药剂学强化提高 | RXcXhSJFITg+hNM9ehqBTQ== | |
生物药剂学专题二 | 第01讲 第七节 药动学概述 | 6wMyWBpgzty+4dO3HWXGvg== | |
生物药剂学专题二 | 第02讲 药动学考点专题强化提高 | s1KiAcSvTgF2QxKi+ZIDhA== |