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

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

作者: peng_js | 来源:发表于2017-07-02 23:03 被阅读0次

    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()

    相关文章

      网友评论

          本文标题:Python 百思不得其解网多线程爬取视频案例

          本文链接:https://www.haomeiwen.com/subject/kkiocxtx.html