1 #coding:utf-8
2 import urllib
3 from bs4 import BeautifulSoup
4 import chardet
5 import os
6 import pickle
7 import wx
8 def getdownLoadInfo(url):
9 #课程名
10 courseTitle=‘‘
11 #课程数目
12 courseCount=0
13 #可下载视频数目
14 videoCount=0
15 #视频下载地址
16 videoUrl=[]
17 #读取网页源文件到html,并处理后存入soup
18 rawhtml=urllib.urlopen(url).read()
19 htmlencoding=chardet.detect(rawhtml)[‘encoding‘]
20 html=rawhtml.decode(htmlencoding,‘ignore‘).encode(‘utf-8‘)
21 soup=BeautifulSoup(html)
22 #对soup进行分析
23 courseTitle=soup.find(name=‘title‘).contents[0]
24 courseInfo=soup.find(attrs={"id":"list2"})
25 courseTitleInfo=courseInfo.find_all(attrs={"class":"u-ctitle"})
26 courseVideoInfo=courseInfo.find_all(attrs={"class":"u-cdown"})
27 for content in courseTitleInfo:
28 courseCount=courseCount+1
29 for link in courseVideoInfo:
30 href=link.find(attrs={"class":"downbtn"})
31 if type(href)==type(None):
32 pass
33 else:
34 href=link.find(attrs={"class":"downbtn"}).get("href")
35 videoCount=videoCount+1
36 videoUrl.append(href)
37 return courseTitle,courseCount,videoCount,videoUrl
38
39 def showInfo(event):
40 # url=r"http://v.163.com/special/opencourse/algorithms.html"
41 textArea.SetValue("")
42 url=text.GetValue()
43 courseTitle,courseCount,videoCount,videoUrl=getdownLoadInfo(url)
44 labelInfo.SetLabel(u‘课程名称:‘+courseTitle+‘\n‘+u‘,课程总集数:‘+unicode(courseCount)+‘\n‘+u‘,可下载集数:‘+unicode(videoCount))
45 for value in videoUrl:
46 textArea.AppendText(value+‘\n‘)
47 if __name__==‘__main__‘:
48 #创建APP
49 app=wx.App(False)
50 #创建frame窗口
51 frame=wx.Frame(parent=None,title=u‘下载网易公开课v1.0‘,size=(800,600),style=wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX)
52 frame.Center()
53 #创建Menu
54 menuBar=wx.MenuBar()
55 menu1=wx.Menu()
56 menuBar.Append(menu1,u"文件")
57 #创建工具栏
58 toolbar=frame.CreateToolBar()
59 #创建Panel
60 panel=wx.Panel(frame)
61 panel.SetBackgroundColour(‘white‘)
62
63 label=wx.StaticText(panel,label=u‘请输入公开课地址:‘)
64 font=wx.Font(13,wx.DECORATIVE,wx.NORMAL,wx.NORMAL)
65 label.SetFont(font)
66
67 text=wx.TextCtrl(panel,size=(700,-1))
68
69 button=wx.Button(panel,label=u‘提取下载地址‘)
70 button.SetFont(font)
71 frame.Bind(wx.EVT_BUTTON,showInfo, button)
72 labelInfo=wx.StaticText(panel,size=(-1,50))
73 textArea=wx.TextCtrl(panel,style=wx.TE_MULTILINE,size=(700,300))
74 #用sizer控制界面
75 sizer=wx.FlexGridSizer(cols=1,vgap=10)
76 sizer.AddMany([label,text,button,labelInfo,textArea])
77 panel.SetSizer(sizer)
78
79 # #创建状态栏
80 statusBar=frame.CreateStatusBar()
81
82 frame.Show(True)
83 app.MainLoop()