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 相关文章推荐
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
python实现键盘控制鼠标移动
Nov 27 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
python类中super() 的使用解析
Dec 19 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
python 爬虫之selenium可视化爬虫的实现
Dec 04 Python
python 实现的IP 存活扫描脚本
Dec 10 Python
SpringBoot首页设置解析(推荐)
Feb 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
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
js中的屏蔽的使用示例
2013/07/30 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
python使用百度翻译进行中翻英示例
2014/04/14 Python
python查询mysql,返回json的实例
2018/03/26 Python
Python实现像awk一样分割字符串
2020/09/15 Python
Python与C/C++的相互调用案例
2021/03/04 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
心理学专业求职信
2014/06/16 职场文书
党员查摆剖析材料
2014/10/10 职场文书
浅谈python中的多态
2021/06/15 Python
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
python函数的两种嵌套方法使用
2022/04/02 Python
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js