基于python的百度图片批量下载软件
写在前面:
爱因斯坦说过:一个人的价值,应该看他付出了什么,而不是看他获得了什么。
工具 :我使用的是 python3 ,另外还需要一个打包工具pyinstaller(将代码打包成exe文件可以移植到任意pc端运行)
软件截图
整个软件的完整代码如下(可以直接运行)
# Edison于2020.2.27日完成
# 开发环境 python 3.7.6
# 版本:V20200227203007.2
from tkinter import *
import random
import urllib.request
import re
import os
import urllib
import urllib.parse
import requests
import tkinter.messagebox
from tkinter.filedialog import askdirectory
from tkinter import filedialog
##以上库全是本项目所需,可能有个别是重复的库
myWindow = Tk() #创建一个窗口
myWindow.title('宇宙最骚爬虫') #设置标题
myWindow['background'] = 'gray' #设置背景为黑色的
myWindow.geometry('380x128') #设置窗口大小
myWindow.resizable(0,0) #窗口大小不可调节
menubar = Menu(myWindow) #创建菜单栏
myWindow['menu']=menubar #菜单栏添加到窗口
def open_dir(): #调用该函数打开目录实现
#path_open =askdirectory()
#path.set(path_open)
path_open=filedialog.askopenfilename()#库函数调用
#path.set(path_open)
print(path_open)
##菜单栏添加函数
menubar.add_command(label='打开文件夹',command=open_dir)
def call_auth():
print(tkinter.messagebox.showwarning(title='提示',message='本软件纯属个人练手用\n不涉及商业利益\n本人主要从事c++开发\npython纯属业余\n不喜勿喷!'))
menubar.add_command(label='联系作者',command=call_auth)
def show_info():
print(tkinter.messagebox.showinfo(title='关于',message='名称:宇宙最骚爬虫\n作者:Edison\n交付日期:2020年2月27日20点07分\n版本信息:V202002272007.2'))
menubar.add_command(label='关于',command=show_info)
#软件中几个输入窗口创建
Label(myWindow, text='输入关键字:', relief=RIDGE, width=15).grid(row=0, column=0)
Label(myWindow, text='限制尺寸大小(kb)', relief=RIDGE, width=15).grid(row=1, column=0)
Label(myWindow, text='保存位置', relief=RIDGE, width=15).grid(row=2, column=0)
entryVar1 = StringVar() #库函数调用传值
entry1 = Entry(myWindow, textvariable=entryVar1, width=40) #创建输入框对象 并指定宽度
entry1.grid(row=0, column=1) #采用网格布局
entryVar2 = StringVar()
entry2 = Entry(myWindow, textvariable=entryVar2, width=40)
entry2.grid(row=1, column=1)
text_result = Text(myWindow, width=40, height=2)
text_result.grid(row=4, column=1)
entryVar3 = StringVar()
entry3 = Entry(myWindow, textvariable=entryVar3, width=40)
entry3.grid(row=2, column=1)
entryVar3.set('F://GetPicture//') #设置图片的保存根目录可以手动修改
url1='http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word='#这个路径很关键 打开百度图片就是这个网址
def getHtml():#自定义函数 用来获取网页对象(就是白天跟你讲的网页代码那一长很乱的字符串)
r = requests.get(url1)#掉用requests库里面的get()函数获取网页对象
ret =r.text #转换成字符串
return ret
def getImg(ret): #获取并保存图片函数
result = re.findall('"objURL":"(.*?)",',ret)#这个匹配是匹配到每个图片的地址
m_path = str(entryVar3.get()) + str(entryVar1.get()) #图片文件夹目录(每次搜索放在关键字对应的目录下)
if not os.path.isdir(m_path): # 判断如果目录不存在需要创建
os.makedirs(m_path)
m_path = m_path +'//'#绝对路径
for i in result:#从获取的图片地址列表中遍历文件
try:
r=requests.get(i,timeout=5)#5秒超时,5秒解析有故障将打印异常,并且跳过目标图片
except Exception as e:
print(e)
continue
path = i[-10:] #取图片地址后10位作为图片的名字
end =re.search(r'\.jpg$|\.jpeg$|\.gif$|\.png$',path) #获取所有格式的文件(这个匹配方式暂时不要问)
if end == None:
path = path + '.jpg'#图片文件的ID
path =re.sub('/',' ',path)#将斜杆换成空格
with open(m_path + path,'wb') as f: #打开文件
f.write(r.content) # 写到文件
size = os.path.getsize(m_path + path)#获取文件大小
size=size/float(1024)
if size > int(entryVar2.get()):#判断图片尺寸是否大于输入的值
os.remove(m_path + path)#如果是,将移除图片
def hitMe():
print(str(entryVar1.get()))
global url1
url1=url1+ str(entryVar1.get())#这个是本来的网址加你输入的关键字构成新的网址
html =getHtml()
(getImg(html))
m_result = str(entryVar1.get()) + ' 本次相关数据爬取完成'
text_result.insert(1.0, m_result + '\n')
url1 ='http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word='#这里记得一定要还原,保证关键不会叠加
button1 = Button(myWindow, text='开始爬取', width=14, command=hitMe)#创建按钮 并绑定事件
button1.grid(row=3, column=0)
def hitClear():
entryVar1.set('') #清除输入框的内容
entryVar2.set('')
button2 = Button(myWindow, text='重新搜索其他资源', width=14, command=hitClear)
button2.grid(row=3, column=1)
def hitClearText():
text_result.delete(1.0, END)
button3 = Button(myWindow, text='清除爬取记录', width=14, command=hitClearText)
button3.grid(row=4, column=0)
mainloop()
补充
打包工具 pyinstaller 介绍:
1.为什么要打包:有些高端的软件里面涉及一些自己的成果不愿意让别人看到(比如位设计一个很牛逼的算法,但我并不想让你知道)
2.打包后的软件会将相关的依赖文件集成在一起,可以在任意其他相应设备上运行
pyinstaller 打包相关命令:
命令 | 详情 |
---|---|
-i | 指定打包后只生成一个exe格式的文件 |
-F | 指定打包后只生成一个exe格式的文件 |
-D | –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项) |
-c | –console, –nowindowed 使用控制台,无界面(默认) |
-w | –windowed, –noconsole 使用窗口,无控制台 |
-p | 添加搜索路径 |
谢谢浏览,希望日后多多交流