学了一下python正则表达式,写一个百度图片爬虫玩玩。

当技术遇上心术不正的人,就成我这样的2B青年了。

python3.6开发。程序已经打包好,下载地址: http://pan.baidu.com/s/1bpalugf 密码:kfk4

#!/usr/local/env python
from tkinter import *
import re,os,requests,hashlib,threading
from PIL import Image class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.school=threading.local()
self.pack()
self.createWidgets() def createWidgets(self):
self.nameLabel=Label(self,text='请输入关键词:')
self.nameLabel.grid(row=0,sticky=W) self.nameInput = Entry(self)
self.nameInput.grid(row=0,column=1) self.picys=IntVar()
self.Checkbutton = Checkbutton(self,text='图片压缩',variable=self.picys)
self.Checkbutton.grid(row=1,column=0,columnspan=2,sticky=W) self.alertButton = Button(self, text='下载',command=self.gorun)
self.alertButton.grid(row=1,column=1,sticky=E) def cddir(self):
keyword=self.nameInput.get()
os.chdir('C:\\Users\\Administrator\\Desktop\\')
if os.path.exists(keyword) ==False:
os.mkdir(keyword)
os.chdir(keyword) def gorun(self):
self.cddir()
word=self.nameInput.get()
x=0
for i in range(5):
t=threading.Thread(target=self.xiazai,args=(x,word,))
t.start()
x+=20
if i == 4:
t.join()
self.delfile()
if self.picys.get() == 1:
self.suoxiao()
def xiazai(self,page,word):
baidupn=self.school.student=page
num=1
for i in range(50):
url='https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8'
payload={'word':word,'pn':baidupn}
html = requests.get(url,params=payload).text
regular='"objURL":"(.*?)",'
pic=re.findall(regular,html)
baidupn+=100 for tu in pic:
try:
dl=requests.get(tu,timeout=60)
pic_name=os.path.basename(tu)
if pic_name in os.walk(os.getcwd()):
continue
else:
if ('?' in pic_name) or ('&' in pic_name) or ('.' not in pic_name):
pic_name='%s%s' %(num,'.jpg')
with open(pic_name,"wb") as code:
code.write(dl.content)
requests.session().keep_alive = False
dl.close()
num+=1
except requests.exceptions.ConnectionError:
#print('这张图片下载失败了,图片地址',tu)
continue def suoxiao(self):
self.cddir()
filedir=os.walk(os.getcwd())
for i in filedir:
for tplb in i[2]:
if ('jpg' in tplb) or ('jpeg' in tplb):
try:
im=Image.open(tplb)
w,h=im.size
if w > 500:
im.thumbnail((w//2,h//2))
im.save(tplb,'jpeg')
im.close()
except OSError:
print('跳过此文件') def md5sum(self,filename):
f=open(filename, 'rb')
md5=hashlib.md5()
while True:
fb = f.read(8096)
if not fb:
break
md5.update(fb)
f.close()
return (md5.hexdigest()) def delfile(self):
all_md5={}
self.cddir()
filedir=os.walk(os.getcwd())
for i in filedir:
for tlie in i[2]:
if self.md5sum(tlie) in all_md5.values():
os.remove(tlie)
else:
all_md5[tlie]=self.md5sum(tlie) app=Application()
app.master.title('图片下载器')
app.mainloop()

  

无耻的求一下赞助

最新文章

  1. 使用Java的Frame类编写的QQ登录界面
  2. NSCache
  3. spring -java.lang.NoClassDefFoundError: javax/mail/MessagingException
  4. TF400916错误修复办法
  5. python3 安装scrapy Exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pip/req/req_install.py", line 1006, in check_if_exists解决方法
  6. IE专用CSS,最全的CSS hack方式一览
  7. 什么情况下会调用到session_destroy()
  8. java J2EE学习入门
  9. SPOJ - VISIBLEBOX [multiset的使用]
  10. touch.js下载使用方式
  11. SSIS - 3.变量
  12. 第一册:lesson ninety-nine。
  13. H3C网络设备配置SSH登录
  14. MFC中添加了一个dialog,并创建了相应的类,初始化函数没有怎么办?
  15. 使用fastjson,gson解析null值的时候键保留
  16. 盘点Linux内核源码中使用宏定义的若干技巧(1)
  17. 初试Gevent – 高性能的Python并发框架
  18. Count on a tree(SPOJ COT + 树上第k大 + 主席树 + LCA)
  19. jQuery 中的 unbind() 方法
  20. MySQL数据库的设计和表创建

热门文章

  1. 【刷题-LeetCode】221. Maximal Square
  2. HBase之MinorCompact全程解析
  3. 如何在Xamarin中快速集成Android版认证服务-手机号码篇
  4. 学习JAVAWEB第七天
  5. java代码实现调用短信接口,发送短信验证。
  6. mybatis 配置文件 简单介绍
  7. Understanding C++ Modules In C++20 (2)
  8. 使用Xamarin开发移动应用示例——数独游戏(六)使用数据库
  9. Atcoder ARC-125
  10. [USACO18DEC]Balance Beam P