|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 SixPy 于 2016-7-22 10:06 编辑
多线程下载图片,以及 界面互动~
原贴
text组件显示延迟问题
http://bbs.fishc.com/thread-73987-1-1.html
下面的程序只是个示范,没有对细节进行太多处理。
也只是下载所有图片链接的前10张~
由于文件会 重名,所以 运行前 先清空 E:/search_picture/ 中的所有图片。
把代码保存为 pyw ,例如: download-pic.pyw;然后双击运行。
- import requests as req
- import re
- import tkinter as tk
- import threading
- lock=threading.Lock()
- Headers = {
- 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
- 'Accept-Encoding':'gzip,deflate,sdch',
- 'Accept-Language':'zh-CN,zh;q=0.8',
- 'Connection':'keep-alive',
- 'Host':'image.baidu.com',
- 'User-Agent':'Mozilla/5.0 (Windows NT 5.1)'
- }
- def getPicUrl():
- bd_url='http://image.baidu.com/search/flip'
- Param = {
- 'tn':'baiduimage',
- 'ie':'utf-8',
- 'word':'壁纸',
- 'pn':'0',
- 'gsm':'500000064'
- }
- ssn= req.Session()
- ssn.headers=Headers
- rsp=ssn.get(bd_url,params = Param)
- rsp.encoding='utf-8'
- html=rsp.text
- pic_url = re.findall('"objURL":"([^"]*)",', html)
- return pic_url
- def down_thd(pic_url,num):
- picPath='E:/search_picture/pic%d.jpg'
-
- lock.acquire()
- screen2.insert(tk.INSERT,'正在下载第%d张:%s\n' % (num, pic_url))
- lock.release()
-
- headers=Headers
- headers['Host']=re.findall('://(.*?)/',pic_url)[0]
- try:
- rsp=req.get(pic_url,headers=headers) # 下载图片
- except:
- lock.acquire()
- screen2.insert(tk.INSERT,'%d 下载失败!\n' % num)
- lock.release()
- return
-
- try:
- with open(picPath % num,'xb') as picf:
- picf.write(rsp.content) # 保存图片
- except:
- lock.acquire()
- screen2.insert(tk.INSERT,'%d 保存失败!\n' % num)
- lock.release()
- return
-
- lock.acquire()
- screen2.insert(tk.INSERT,'%d完成\n' % num)
- lock.release()
- return
-
- def run():
- pic_url = getPicUrl()
- pic_url = pic_url[:10] # 只下10张,示范
- thds=[]
- for i in range(len(pic_url)):
- t=threading.Thread(target=down_thd, args=(pic_url[i],i))
- thds.append(t)
-
- for t in thds:
- t.start()
- return
- ##import os
- ##os.mkdir('E:/search_picture/') ##这个文件夹就自己手动新建一个吧
- root=tk.Tk()
- screen2=tk.Text(root,height=25,width=110)
- screen2.pack()
- bot=tk.Button(root,text='开始下载',command = run)
- bot.pack()
- root.mainloop()
复制代码
效果:
|
评分
-
参与人数 3 | 荣誉 +20 |
鱼币 +20 |
贡献 +13 |
收起
理由
|
拈花小仙
| + 5 |
+ 5 |
+ 3 |
感谢楼主无私奉献! |
~风介~
| + 5 |
+ 5 |
+ 5 |
支持楼主! |
冬雪雪冬
| + 10 |
+ 10 |
+ 5 |
感谢楼主无私奉献! |
查看全部评分
|