python2.7爬虫——配合简单的GUI

#-*- coding:utf-8 -*-

'''

先在D盘下创建一个demo的文件夹

'''
from Tkinter import *
from ScrolledText import ScrolledText#文本滚动条

import urllib,requests
import re
import threading
import time

'''
爬虫部分
'''

url_name = []
a = 1#页面

def get():
    global a
    hd = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
    url = 'http://www.budejie.com/video/'+str(a)
    html = requests.get(url,headers=hd).text
    # values.set('已经获取%s页视频'%(a))
    ref = re.compile(r'(<div class="j-r-list-c">.*?</div>.*?</div>)',re.S)
    res = re.findall(ref,html)
    for i in res :
        url_reg = re.compile(r'data-mp4="(.*?)">')
        url_items = re.findall(url_reg, i)
        if url_items:
            url_title = re.findall(r'<a href="/detail-\d{8}.html">(.*?)</a>', i)

            for i,k in zip(url_title,url_items):
                url_name.append([i,k])
                # print i,k
    return url_name

id = 1
def write():
    global id
    while id<10:
        url_name = get()
        for i in url_name:
            # print i[0]
            urllib.urlretrieve(i[1],'E:/demo/%s.mp4'%id)
            text.insert(END,str(id)+'.'+i[0]+'\n'+i[1]+'\n')
            url_name.pop(0)
            id+=1


def start():
    th = threading.Thread(target=write)
    th.start()


# if __name__ == '__main__':
#     write()



'''
GUI 界面构造
'''
root = Tk()#实例化一个对象
root.title('GUI_Demo')
text = ScrolledText(root,font=('微软雅黑',10))
text.grid()#实现复杂布局
button = Button(root,text = '开始爬取',font=('微软雅黑',10),command = start)
button.grid()
values = StringVar()#通过tk方法绑定一个 变量
lable = Label(root,font=('微软雅黑',10),fg ='red',textvariable= values)
values.set('Demo——一开始执行')
lable.grid()
root.mainloop()#创建窗口指令



GUI部分 不怎么懂··  也还没看到


下载网络视频时 使用的 urllib.urlretrieve() 这个方法  

urlretrieve(url, filename=None, reporthook=None, data=None)

  • 参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
  • 参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
  • 参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。

使用到了多线程 threading.Thread(target=)
然后使用star方法开启线程


requests 是一个请求网络连接的第三方库··  QwQ  应该是吧 ···  

可以模拟GET 和 POST 请求 (TwT 其他的不常用···)

使用headers 来设置请求头信息 (一般设置User - Agent 这个是模拟使用浏览器的头信息··)


re正则的话 用到的 贪婪和非贪婪 TwT  简单的记住.*?少食多餐(非贪婪匹配) .*暴饮暴食(贪婪匹配)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值