Python 百思不得其解网多线程爬取视频案例

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'(
.?
.?
)',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'(.?)',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()



你可能感兴趣的:(Python)