本篇文章小编给大家分享一下Python+tkinter实现高清图片保存代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
基本开发环境
pycharm
Python 3.8
主要相关模块
request,BeautifulSoup,tkinter(Python内置库,直接导入即可)
先看一下(Python+tkinter(图形化界面设计))最终效果吧,高清大图保存到本地电脑了,
(现在只需要在控制台输入pyinstaller -F -w 自己的py文件名.py)就可以就能打包成exe放到桌面了。
分析网页
在爬取之前第一步还是先对网页进行分析,确定网页是静态的还是动态的,知己知彼才好下手,是吧!以避开爬取难点,节约时间。
我们打开网页右键检查输入关键字发现可以找到图片的信息,我们大致可以确定这个网站是静态的。那么我们就可以根据普通的方法对网页进行抓取。
开始工作
1.1
先是构造个伪造头防止简单的的反爬,然后对网页发起请求,如果我请求的对象得到的状态码是200(成功访问)那么就返回text文本给我。
1.2
网页请求成功之后我们就可以在网页分析图片存放的位置在哪。
通关观察发现,我们要的图片储存在标签div class=‘list’下面的ul标签,ul标签下面li全部是我们需要的图片。位置我们找到了那么接下来就实例化一个soup对象来找到所有的li标签,紧接着循环每个li标签,获取li标签里边标签b获取图片的名字,然后再到img标签src这个属性提取图片链接。
下面代码演示。
1.3
图片的名字和图片的链接都有了,接下来就是创建存放位置,因为图片是二进制数据,所以以content的方式请求,最后以wb的形式写入文件夹。
分析网页我们不难发现页面翻页的规律,只要循环一下就能实现,页面翻页实现翻页爬取。(想要更多翻页自己改数字吧)
index_2.htm
index_3.htm
index_4.htm
最后就是设置一下tkinter图形化界面(这里不再过多详解,可以上博客查看),设计与程序结合一下就完成了。
实现
全部代码
# @Author : 王同学 import requests from bs4 import BeautifulSoup import os import tkinter as tk # GUI import concurrent.futures import threading def get_content(url): headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'} response = requests.get(url,headers) response.encoding = response.apparent_encoding # 自动转码 if response.status_code == 200: return response.text def get_data(response): soup = BeautifulSoup(response,'lxml') all_li = soup.find(class_="list").find('ul') for i in all_li.find_all('li'): if i.find('b') is not None: title = i.find('b').text else: title = 'NOT' images = i.find('a').find('img').get('src') save_images(title,images) def save_csv(): pass def save_images(title,images): if not os.path.exists('img'): # 创建文件夹 os.mkdir('img') headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'} images_data = requests.get(url=images,headers=headers).content with open('img' + title + '.jpg', mode='wb')as f: f.write(images_data) print('正在保存===>: ',title) # GUI文本框输入 qq.insert(tk.INSERT,"正在保存图片:" + title + 'n') qq.yview_moveto(1) qq.update() def main(): print('===================已经点击按钮===========================') for i in range(2,11): url = f'http://www.netbian.com/index_{i}.htm' # 循环 qq.insert(tk.INSERT,f'==========================正在保存第{i}页的图片=========================='+ 'n') qq.update() print(f'============================正在保存第{i}页的数据内容========================') response = get_content(url) get_data(response) qq.insert(tk.INSERT,'=================================保存结束================================') # 多线程 防止GUI卡死 def process_it(): it = threading.Thread(target=main) it.setDaemon(True) it.start() if __name__ == '__main__': # 设置GUI图形界面 windoms = tk.Tk() windoms.iconbitmap() windoms.title('图片') windoms.geometry('500x500+650+300') # labal text = tk.Label(windoms,text='图片小程序',font=('华文新魏',20)) text.place(x=170,y=10) # 按钮 button = tk.Button(windoms,text='开始下载',font=(20),,,fg='Violet',bd=8,command=process_it) # 开始下载 button.place(x=140,y=80) button1 = tk.Button(windoms,text='退出',font=(20),,fg='Violet',,bd=8,command=windoms.quit) # 退出 button1.place(x=140, y=180) # 文本框 qq = tk.Text(windoms,state='normal',bg='light cyan',fg='DeepPink') qq.place(rely=0.6,rel.4) # 显示窗口 tk.mainloop()
太极熊猫2百度版 安卓版v1.7.1
下载黎明觉醒应用宝版 安卓版v1.111.1
下载暗影格斗3国际版 (Shadow Fight 3)最新版v1.40.3
下载王者战魂华为版 安卓版v3.6.1
下载放置魔法学院免广告版 v2.9.5
放置魔法学院内置Mod菜单是游戏的破解版本,在该版本中为玩家
万乘之国qq版本 安卓版v1.0.5
万乘之国qq版本是一款极具魅力的策略游戏,玩家们可以通过不同
动物餐厅国际服无限内购版 v12.9
动物餐厅国际服免广告版是游戏的破解版本,在该版本中为玩家去除
欧洲卡车司机 安卓版v3.2
欧洲卡车司机是款模拟经营游戏,这款游戏的画面还是蛮逼真的,给
疯狂大酒店 (Grand Hotel Mania)最新中文版v4.10.0.20
疯狂大酒店(Grand Hotel Mania)是一款好玩的