一款简易的百度图片批量下载软件

学了一段时间的爬虫,于是就想着做一个小项目练练手,平时生活中我们可能需要去百度上搜索图片,有时想要下载多张图片,怎么办呢?笨方法就是一张一张的用鼠标右键进行保存图片,这是不是很麻烦,所以就自己想了一下,做个界面版的下载器,方便我们可以进行批量下载百度图片!

百度图片下载器的界面效果:
在这里插入图片描述
判断条件:
1、判断搜索的关键词是否为空
在这里插入图片描述

2、判断保存路径是否为空
在这里插入图片描述

3、判断页数是否为空
在这里插入图片描述

此篇文章所涉及的知识点主要有:requests库,tkinter图形化界面

1、通过requests库发起请求,得到数据,并且使用正则将图片匹配出来,接下来就是保存图片的

def images(self, url, path):
        # 添加请求头
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4315.5 Safari/537.36',
        }

        # 发送请求
        req = requests.get(url, headers=headers)

        # 保存源文件
        html = req.text

        # 匹配图片格式
        images = re.findall('"thumbURL":"(.*?)"', html, re.S)

        # 循环输入image
        for index, image in enumerate(images):
            req = requests.get(image)
            # 动态拼接图片文件名
            file = '{}{}'.format(self.rekeyword, image.split(',')[-1].split('&')[0])
            with open('{}/'.format(path) + file + '.jpg', 'wb') as f:
                f.write(req.content)

虽然是个小项目,可能会有很多不足的地方,希望大家也能够提出宝贵的意见,大家一起进行学习,让这个项目更加的完善,谢谢!!!

最后附上全部代码。

完整代码如下:

import tkinter as tk
from tkinter import messagebox, DISABLED
import os, re
import requests
from tkinter.filedialog import askdirectory


class Baidu():
    def __init__(self):
        self.repage = 0

    # 定义一个文件路径选择的方法
    def root(self):
        path_ = askdirectory()
        path.set(path_)

    # 定义一个btnserach按钮事件的方法
    def click(self):
        keyword = entword.get()
        root = entroot.get()
        page = entpage.get()
        if keyword == '':
            tk.messagebox.showinfo('警告', message='你还没有输入关键词')
        else:
            if root == '':
                tk.messagebox.showinfo('警告', message='你还没有选择保存路径')
            else:
                if page == '':
                    tk.messagebox.showinfo('警告', message='你还没有输入想要下载的页数')
                else:
                    if not page.isdigit():
                        tk.messagebox.showinfo('警告', message='请输入数字')
                    else:
                        root = root + '/' + keyword
                        tk.messagebox.showinfo('成功', message='点击确定,等待图片下载,下载过程中请勿关闭窗口,下载结束会自动关闭')

                        # 将返回值
                        self.rekeyword = keyword
                        self.reroot = root
                        self.repage = page

                        # 调用save方法
                        self.save()
                        # 关闭窗口
                        window.quit()

    def close(self):
        self.repage = 0
        # 关闭窗口
        window.quit()

    # 定义保存路径和文件夹的方法
    def save(self):
        if os.path.exists('{}'.format(self.reroot)) is False:
            os.mkdir(self.reroot)

    def images(self, url, path):
        # 添加请求头
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4315.5 Safari/537.36',
        }

        # 发送请求
        req = requests.get(url, headers=headers)

        # 保存源文件
        html = req.text

        # 匹配图片格式
        images = re.findall('"thumbURL":"(.*?)"', html, re.S)

        # 循环输入image
        for index, image in enumerate(images):
            req = requests.get(image)
            # 动态拼接图片文件名
            file = '{}{}'.format(self.rekeyword, image.split(',')[-1].split('&')[0])
            with open('{}/'.format(path) + file + '.jpg', 'wb') as f:
                f.write(req.content)


if __name__ == '__main__':
    # 实例化一个Baidu类
    baidu = Baidu()

    # 创建一个窗口
    window = tk.Tk()

    # 设置窗口标题
    window.title('下载器')

    # 设置窗口大小
    window.geometry('500x300')

    # 创建按钮,并且将按钮放到窗口里面,text给按钮设置名字
    labtitle = tk.Label(window, text='百度图片批量下载器', font=("微软雅黑", 18))
    labword = tk.Label(window, text='请输入关键词:')
    entword = tk.Entry(window)
    labroot = tk.Label(window, text='请选择保存路径:')
    path = tk.StringVar()
    entroot = tk.Entry(window, textvariable=path, state=DISABLED)
    btnroot = tk.Button(window, text="路径选择", command=baidu.root)
    labpage = tk.Label(window, text='请选择下载页数:')
    entpage = tk.Entry(window)
    btnserach = tk.Button(window, text='开始下载', command=baidu.click)
    btnexit = tk.Button(window, text='    退出    ', command=baidu.close)

    # 给按钮布局到窗口的哪个地方
    labtitle.place(x=140, y=20)

    labword.place(x=100, y=70)
    entword.place(x=200, y=70)

    labroot.place(x=100, y=120)
    entroot.place(x=200, y=120)
    btnroot.place(x=350, y=115)

    labpage.place(x=100, y=170)
    entpage.place(x=200, y=170)

    btnserach.place(x=150, y=240)
    btnexit.place(x=250, y=240)

    # 显示窗口
    window.mainloop()

	# 下载的页数
    for i in range(1, int(baidu.repage) + 1):
        url = 'https://image.baidu.com/search/acjson?' \
              'tn=resultjson_com&logid=11634671260851425331&ipn=rj' \
              '&ct=201326592&is=&fp=result&queryWord={}&cl=2&lm=-1' \
              '&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=' \
              '&word={}&s=&se=&tab=&width=&height=&face=0&istype=2' \
              '&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm={}e&1607738339848='.format(baidu.rekeyword,
                                                                                          baidu.rekeyword,
                                                                                          i * 30, i)
        baidu.images(url, baidu.reroot)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LCrush201809

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

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

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

打赏作者

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

抵扣说明:

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

余额充值