Python+tkinter实现高清图片保存


Posted in Python onMarch 13, 2022

作为爱玩电脑的你是不是也需要经常更换一下自己的电脑壁纸呢? 换上一张心仪的图片整个人都舒畅多了。但是在网上有很多心仪的图片想要保存下来,如果一张张的去保存那效率又低,而后面的壁纸很有很多好看的又没有时间去看,这样就让我们错过了很多好看的壁纸,我们从从网站上一个一个下载实在太麻烦。

于是我用Python写一个保存图片的功能,把我们的图片给保存到我们的电脑,这样就可以浏览哪张好看就换哪张,不用再去慢慢保存了。

提示:以下是本篇文章正文内容,下面案例可供参考

前言

Python的学习先从基础开始,给自己找任务多给自己实践的机会只有实践才能悟出道理,因为实践练习才是学习的最好方式。

基本开发环境

pycharm

Python 3.8

主要相关模块

request,BeautifulSoup,tkinter(Python内置库,直接导入即可)

先看一下(Python+tkinter(图形化界面设计))最终效果吧,高清大图保存到本地电脑了,

(现在只需要在控制台输入pyinstaller -F -w 自己的py文件名.py)就可以就能打包成exe放到桌面了。

Python+tkinter实现高清图片保存

Python+tkinter实现高清图片保存

分析网页

在爬取之前第一步还是先对网页进行分析,确定网页是静态的还是动态的,知己知彼才好下手,是吧!以避开爬取难点,节约时间。

Python+tkinter实现高清图片保存

我们打开网页右键检查输入关键字发现可以找到图片的信息,我们大致可以确定这个网站是静态的。那么我们就可以根据普通的方法对网页进行抓取。

开始工作

1.1

先是构造个伪造头防止简单的的反爬,然后对网页发起请求,如果我请求的对象得到的状态码是200(成功访问)那么就返回text文本给我。

Python+tkinter实现高清图片保存

1.2

网页请求成功之后我们就可以在网页分析图片存放的位置在哪。

Python+tkinter实现高清图片保存

通关观察发现,我们要的图片储存在标签div class=‘list’下面的ul标签,ul标签下面li全部是我们需要的图片。位置我们找到了那么接下来就实例化一个soup对象来找到所有的li标签,紧接着循环每个li标签,获取li标签里边标签b获取图片的名字,然后再到img标签src这个属性提取图片链接。

Python+tkinter实现高清图片保存

下面代码演示。

Python+tkinter实现高清图片保存

1.3

图片的名字和图片的链接都有了,接下来就是创建存放位置,因为图片是二进制数据,所以以content的方式请求,最后以wb的形式写入文件夹。

Python+tkinter实现高清图片保存

分析网页我们不难发现页面翻页的规律,只要循环一下就能实现,页面翻页实现翻页爬取。(想要更多翻页自己改数字吧)

index_2.htm

index_3.htm

index_4.htm

Python+tkinter实现高清图片保存

最后就是设置一下tkinter图形化界面(这里不再过多详解,可以上博客查看),设计与程序结合一下就完成了。

Python+tkinter实现高清图片保存

实现

Python+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),width=30,height=4,fg='Violet',bd=8,command=process_it)   # 开始下载
    button.place(x=140,y=80)
    button1 = tk.Button(windoms,text='退出',font=(20),width=30,fg='Violet',height=4,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,relheight=0.4)
    # 显示窗口
    tk.mainloop()

到此这篇关于Python+tkinter实现高清图片保存的文章就介绍到这了,更多相关Python tkinter图片保存内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中使用dom模块生成XML文件示例
Apr 05 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
python操作mongodb根据_id查询数据的实现方法
May 20 Python
python定时器(Timer)用法简单实例
Jun 04 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
Dec 20 Python
Flask实现跨域请求的处理方法
Sep 27 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
tensorflow2.0教程之Keras快速入门
Feb 20 Python
Python 文字识别
May 11 Python
Python中的 Set 与 dict
Mar 13 #Python
Python echarts实现数据可视化实例详解
分享3个非常实用的 Python 模块
Mar 03 #Python
详解在OpenCV中如何使用图像像素
 Python 中 logging 模块使用详情
Mar 03 #Python
分享7个 Python 实战项目练习
Mar 03 #Python
python工具dtreeviz决策树可视化和模型可解释性
You might like
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
PHP中,文件上传
2006/12/06 PHP
php MySQL与分页效率
2008/06/04 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
php实现上传图片文件代码
2015/07/19 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
python随机数分布random均匀分布实例
2019/11/27 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
培训讲师岗位职责
2014/04/13 职场文书
高中同学会活动方案
2014/08/14 职场文书
小学毕业感言100字
2015/07/30 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python