coding:utf-8
上面設置的是py文件的編碼
自帶的Tkinter模塊
from Tkinter import *
from ScrolledText import ScrolledText
import urllib,requests,re
import threading
輸出的內容編碼是utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
用來存視頻地址和名稱
url_name=[]
頁碼
a=1
def get():
global a
#加上User-Agent代理模擬瀏覽器請求
user_agent={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'}
url='http://www.budejie.com/'+str(a)
var.set('已經獲取到第%s頁'%(a))
html = requests.get(url,headers=user_agent).text
a+=1
#正則匹配
#.?表示匹配任意字符但不取出來 (.?)匹配任意字符但要取出來
#re.S表示匹配換行符
content=re.compile(r'(<div class="j-r-list-c">.?</div>.?</div>)',re.S)
# print type(content)
# sys.exit()
#findall返回的是列表
contents=re.findall(content,html)
for i in contents:
video_re = re.compile(r'data-mp4="(.?)">',re.S)
video_urls=re.findall(video_re, i)
if video_urls:
name=re.compile(r'<a href="/detail-.{8}?.html">(.?)</a>',re.S)
names=re.findall(name,i)
#zip()就是合并列表的意思
for i,k in zip(names,video_urls):
url_name.append([i,k])
#返回視頻地址和名稱
return url_name
url_name=get()
print url_name
sys.exit()
id=1#視頻個數
def write():
global id
while id<10:
#url_name視頻地址和名稱
url_name=get()
for i in url_name:
#urlretrieve()下載函數
urllib.urlretrieve(i[1],'baishibudeqijie\%s.mp4' % (i[0].decode('utf-8').encode('gbk')))
text.insert(END,str(id)+'.'+i[1]+'\n'+i[0]+'\n')
#刪除已經有的數據
url_name.pop(0)
id+=1
var.set('已經抓取完畢!!!')
def start():
th=threading.Thread(target=write)
th.start()
th.join()
gui框
root = Tk()
root.title('視頻多線程')
窗口坐標和大小 +代表調整坐標 x代表調整大小
root.geometry('+200+100')
滾動條
text = ScrolledText(root,font=('微軟雅黑',10))
實現滾動條方法grid()
text.grid()
按鈕
command=start 按鈕綁定方法
button = Button(root,text='開始爬取',font=('微軟雅黑',10),command=start)
實現按鈕
button.grid()
label
文本變量
var=StringVar()
textvariable 綁定文本變量
label = Label(root,font=('微軟雅黑',10),fg='red',textvariable=var)
label.grid()
文本變量文本內容
var.set('已準備...')
實現窗口命令
root.mainloop()