python GUI制作一个爬虫程序,python小工具图片爬虫

仅供练习GUI 和 爬虫使用
请添加图片描述

请添加图片描述
‘’’
逻辑思路
1、爬取图片import requests
2、使用tkinter 设计的GUI,输入对应的照片信息进行爬取保存
3、程序设置过期时间 时间为3个月
‘’’


from tkinter import *
from tkinter.filedialog import askdirectory,askopenfilename #获取文件夹本地路径  ,获取文件路径
from tkinter import messagebox   #信息框
import json
import os
import time
import datetime



class SouGou_img():
    def __init__(self):
        self.window = Tk()
        self.window.title('图片批量爬取')  #定义窗口名称
        self.juzhong()      #设置一个窗口居中函数
        self.window.resizable(0,0)  #固定窗口大小
        # photo = PhotoImage(file='chuangkou_logo.gif')   #设置窗口图标  设置了图标或者图片 打包的时候需要用-D  不能用-F
        # self.window.iconphoto(False, photo)
        self.over_time()  #过期时间
        # self.open_path = StringVar()  # 显示文件路径字符串
        self.save_path = StringVar()  # 显示文件夹字符串

        self.lab1 = Label(self.window, text='搜索图片名称*:', font=('微软雅黑'),fg='red')  # 搜索图片名称
        self.lab2 = Label(self.window, text='数量:', font=('微软雅黑'))  # 数量
        self.lab3 = Label(self.window, text='白嫖的IT知识抖音号*:', font=('微软雅黑'),fg='red')  # 数量
        self.lab4 = Label(self.window, text='图片保存路径*:', font=('微软雅黑'),fg='red')  # 图片保存路径
        self.lab6 = Label(self.window, text='抖音搜索"白嫖的IT知识"获取更多实用小工具', font=('微软雅黑'), fg='green')  # 标签

        self.text = Text(self.window, width=63, height=14, font=('微软雅黑'))  #文本显示

        self.entry_name = Entry(self.window, width=15)  # 搜索图片名称
        self.entry_num = Entry(self.window, width=6)  # 数量
        self.entry_ID = Entry(self.window, width=12)  # 抖音ID
        self.entry_addr = Entry(self.window, textvariable=self.save_path, width=59)  # 保存文件夹的路径

        self.but3 = Button(self.window, text='开始爬取', relief=RAISED, bg='red', font=('微软雅黑', '8', 'bold'),
                           command=self.Get_Date)  #   #按钮点击下载
        self.but2 = Button(self.window, text='选择', relief=RAISED, command=self.select2_path)  # 按钮  选择保存路径

        # UI界面设计
    def gui_arrang(self):
        """完成页面元素布局,设置各部件的位置"""
        # self.lab0.pack()
        self.lab1.place(x=0, y=4)   #搜索图片名称
        self.lab2.place(x=230, y=4)  #数量
        self.lab3.place(x=330, y=4)  #白嫖的IT知识 抖音号
        self.lab4.place(x=0, y=30)  # 保存路径
        self.lab6.place(x=140, y=365)

        self.but2.place(x=535, y=31)  # 选择
        self.but3.place(x=516, y=365)  # 开始生成

        self.entry_name.place(x=117, y=8)
        self.entry_num.place(x=275, y=8)
        self.entry_ID.place(x=485, y=8)
        self.entry_addr.place(x=117, y=35)

        self.text.place(x=2, y=65)  #大文本

        # 保存路径  文件夹路径
    def select2_path(self):
        path = askdirectory()
        self.save_path.set(path)

        # 窗口居中
    def juzhong(self):
        width = 575
        height = 395
        self.window.geometry(f'{width}x{height}')   #设计的窗口大小
        #居中位置 计算屏幕的居中位置
        screen_width = self.window.winfo_screenwidth() / 2 - width / 2
        screen_height = self.window.winfo_screenheight() / 2 - height / 2
        self.window.geometry(f"+{int(screen_width)}+{int(screen_height)}") #偏移位置

    # 清楚文本框内容
    def clera(self):
        self.text.delete('0.0','end')

    def insert(self):
        self.text.insert('end', '1、红色带星为必填项哦'+'\n')
        self.text.insert('end','2、默认图片最小获取数量为48张'+'\n')
        self.text.insert('end','3、抖音上搜索“白嫖的IT知识”进入主页就能看到抖音号啦'+'\n')
        self.text.insert('end','4、爬取100张大约等待30秒即可完成'+'\n')
        self.text.insert('end','====================图片链接如下===================' +'\n')
    # 设置程序过期时间
    def over_time(self):
        over_time = '2022-08-17'
        now_time = datetime.datetime.now().strftime('%Y-%m-%d')
        if now_time > over_time:
            messagebox.showerror('错误','使用时间已到,请联系"白嫖的IT知识"获取无限制版')
            self.window.destroy()

    # 获取网页数据
    def Get_Date(self):
        if self.entry_name.get() == '':
            messagebox.showerror('错误','搜索图片名称不能为空')
        elif self.entry_addr.get() == '':
            messagebox.showerror('错误','保存路径不能为空')
        elif self.entry_ID.get() == '193292006':
            name = self.entry_name.get()
            num = self.entry_num.get()
            path = self.entry_addr.get() + '/'
            num_1 = 0
            url = f'https://pic.sogou.com/napi/pc/searchList?mode=2&start=4&xml_len={num}&query={name}'
            # mode = 尺寸格式 & start = 初始显示数量 & xml_len = 初始数+需要显示多少张, & query =搜索名称
            print(url)
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36'
            }
            html_data = requests.get(url=url,headers=headers).text  #获取文本数据
            json_data = json.loads(html_data) #转换为json格式
            # pprint.pprint(json_data)
            data_all = json_data['data']['items']
            list = []
            for url in data_all:
                # self.text.insert('end', '图片保存成功' + '/n')
                time.sleep(0.2)  #停顿时间
                num_1 += 1
                img_url = url['picUrl']      #获取图片链接
                list.append(img_url)
                print(img_url)
                if not os.path.exists(path+name):  #如果命名的文件夹不存在  则创建
                    os.makedirs(path+name)
                # try 当程序发生错误的时候 跳过该错误,继续运行程序
                try:
                    img_data = requests.get(url=img_url,headers=headers).content   #图片信息获取
                    with open(r'{0}\{1}\{2}.jpg'.format(path,name,num_1),'wb') as f:
                        f.write(img_data)
                        print(f'第{num_1}张图片保存成功')
                    self.text.insert('end', '图片保存成功:'+img_url + '\n')
                except:
                    print(f'第{num_1}图片地址错误,无法保存')
            messagebox.showinfo('完成',f'图片保存完,成共计{num_1}张')
        else:
            messagebox.showinfo('抖音号错误','抖音号不对哦')

def main():
    S=SouGou_img()
    S.gui_arrang() #UI
    S.insert()  #文本框默认内容
    mainloop()

if __name__ == '__main__':
    main()
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙崎大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值