有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 1422|回复: 3
收起左侧

[Python] 网易公开课批量下载解决方案

 关闭 [复制链接]

该用户从未签到

1

主题

0

好友

791

积分

技术宅认证职人

积分
791
发表于 2013-4-3 09:20:10 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 NBY 于 2013-4-3 09:21 编辑

源地址:http://my.nby.me/?p=34
基于Python3.3
首先请安装Python3.3...(想打包但是不知为何cxfreeze安装错误)
然后下载http://www.crummy.com/software/B ... lsoup4-4.1.3.tar.gz
解压后放某个地方...
cmd运行(cmd到文件夹里面)X:\XXX\BeautifulSoup>python setup.py build
cmd运行X:\XXX\BeautifulSoup>python setup.py install
然后cmd切到v1.0.pyw所在目录 执行命令python v1.0.pyw
例如:
斯坦福大学公开课:量子力学
http://v.163.com/special/opencourse/mechanics.html

使用迅雷在页面选择使用下载全部链接,选择保存视频文件,
如图下载后的文件为杂乱的字母数字组合,不能识别是哪一集

批量下载完成后,把刚才的页面地址填写到第一个输入框,将视频的存放的目的地址填写在第二个输入框如:F:\斯坦福大学公开课\量子力学
点击开即可重名为网页上的名字

嘛...有问题的话可以通过邮件问我 [email protected]


v1.0.pyw内容:



import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from bs4 import BeautifulSoup
import re
import os
import urllib.request
from urllib.error import URLError,HTTPError

root = tk.Tk()
root.resizable(False, False)
root.title("网易公开课文件改名")
def start():
URL = URL_TXT.get()
dir = DIR_TXT.get()
if os.path.exists(dir) :
os.chdir(dir)
else:
tk.messagebox.showerror("错误","请检查输入的视频路径是否正确!!!")
return;
try:
data = urllib.request.urlopen(URL)
except (HTTPError, URLError, ValueError):
tk.messagebox.showerror("错误","请检查输入的网站路径是否正确,或网站是否可用!!!")
return

html = data.read()
soup = BeautifulSoup(html)
kcjj = soup.find('div',class_="m-cdes")
jsjs = soup.find('div',class_="m-cteacher")
xyjs = soup.find('div',class_="m-ccollege")
title = soup.find('title')

str = URL+'\n'+kcjj.text + jsjs.text + xyjs.text#要保留的课程介绍内容
fileStr = re.sub(r"\n+", "\n", str)
f = open(title.text+'.txt','w')
f.truncate()
f.write(fileStr)
f.close()
table = soup.find(id = "list2")
for fileList in table.find_all('tr'):
if fileList.has_key('class'):
newName = re.sub(r"[\n\r\s]",'', fileList.td.text)
trsib = fileList.td.find_next_sibling().a
if trsib!=None:
downPath = trsib.get('href')
else:
continue
baseName = os.path.basename(downPath)
extName = os.path.splitext(baseName)[1]
if os.path.isfile(baseName):
os.rename(baseName, newName+extName)
log_Lable["text"] = baseName + " 改名为 " + newName+extName
else:
log_Lable['bg'] = '#00FF00'
log_Lable['fg'] = '#FF0000'
log_Lable["text"] = baseName + "文件不存在,请确认是否下载完成、目录是否正确"
tk.messagebox.showinfo("改名","修改已完成!!!")

def about():
tk.messagebox.showinfo("关于...","这是一个把从网站上下载的网易公开课视屏从不可读的杂乱文件名改为网页上显示的文件名的小工具")

def selcet():
src = tk.filedialog.askdirectory(title="请选择视频文件存放目录")
DIR_TXT.delete(0, tk.END)
DIR_TXT.insert(0, src)

tk.Label(root,text="输入源地址:").grid(row = 0,column = 0)
URL_TXT = tk.Entry(root,width="50")
URL_TXT.grid(row = 0,column = 1)
URL_TXT.insert(0, "输入公开的下载源网页地址")
AboutBtn = tk.Button(root,text="关于",command = about,width="10").grid(row = 0,column = 2)
tk.Label(root,text="选择文件目录:").grid(row = 1,column = 0)
DIR_TXT = tk.Entry(root,width="50")
DIR_TXT.grid(row = 1,column = 1)
DIR_TXT.insert(0, "选择下载后视频文件存放的目录")
DIRBtn = tk.Button(root,text="选择",command = selcet,width="10").grid(row = 1,column = 2)
tk.Label(root,text="正在修改:").grid(row = 2,column = 0)
log_Lable = tk.Label(root,text="请确保目录和网址正确",width="50")
log_Lable.grid(row = 2,column = 1)
renameBtn = tk.Button(root,text="开始",command = start,width="10").grid(row = 2,column = 2)
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

28

主题

200

好友

4万

积分

天然呆

人妻_(:зゝ∠)_

积分
40817
发表于 2013-4-3 09:38:18 | 显示全部楼层
去试一试呢~( ̄▽ ̄)~*
谢谢分享
看庭前花开花落、云卷云舒、缘来缘去
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

98

主题

213

好友

4万

积分

第二章

积分
44857
发表于 2013-4-5 10:57:58 | 显示全部楼层
哇噻~~好福利
为世界和平~~~干吧呆<(‵□′)/
回复 支持 反对

使用道具 举报

签到天数: 2 天

连续签到: 1 天

[LV.1]初来乍到

7

主题

26

好友

1万

积分

第一章

积分
10500
发表于 2013-4-7 13:09:54 | 显示全部楼层
真是好福利呀……^▼^
【一个一个戳开下载真是太揪心了谢谢LZ……
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-5-25 06:19 , Processed in 0.262733 second(s), 17 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表