自动采集全网图片小程序(异步版)~

上图

 

                aiohttp,asyncio和aiofiles我真的是大爱 ,有了它,再也不用为配图烦恼了哈哈哈,

下面代码:

# *coding=utf-8
import asyncio
import os
from io import BytesIO

import PySimpleGUI as sg
import aiofiles
import aiohttp
import pygame
import requests
from PIL import Image

loop = asyncio.get_event_loop()
k = 0

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
    'Access-Control-Allow-Credentials': 'true',
    'Connection': 'keep-alive',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Referer': 'https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E5%B0%8F%E7%A7%98'
}




async def get_img(u, kk, name):
    async with aiohttp.ClientSession()as session:
        async with session.get(u, headers=header)as resp:
            content = await resp.content.read()
            async with aiofiles.open(f'{name}/' + '{}.jpg'.format(kk), 'wb')as fp:
                await fp.write(content)
                print('over' + str(kk))


url_list = []  # 存图片的url


async def small_main(nam):
    global k
    # 创建文件夹
    file_name = os.makedirs(nam)
    qa = []
    for iii in url_list:
        k += 1
        qa.append(get_img(iii, k, nam))
    await asyncio.wait(qa)


# 返回图片列表
def init(n, num=60):
    global url_list
    url = 'https://image.baidu.com/search/acjson'
    obj = n
    param = {
        'tn': 'resultjson_com',
        'logid': 7404155273977471214,
        'ipn': 'rj',
        'ct': 201326592,
        'fp': 'result',
        'queryWord': obj,
        'cl': 2,
        'lm': -1,
        'ie': 'utf-8',
        'oe': 'utf-8',
        'word': obj,
        'nc': 1,
        'pn': 0,
        'rn': num,  # 要申请展示的图片数量
        'gsm': '1e'
    }
    r = requests.get(url, params=param, headers=header)
    data = r.json()['data']
    COUNT = 0
    for i in data[0:num]:
        COUNT = COUNT + 1
        url_list.append(i['thumbURL'])
    print(COUNT)
    # 进行图片的存储
    return url_list


def image_to_data(im):
    with BytesIO() as output:
        im.save(output, format="PNG")
        data = output.getvalue()
    return data


def make_background(window, file, main_frame):
    global images

    def find_frames(widget):
        widgets = list(widget.children.values())
        if isinstance(widget, (sg.tk.Frame, sg.tk.LabelFrame)):
            widget.update()
            x, y = widget.winfo_rootx() - x0, widget.winfo_rooty() - y0
            width, height = widget.winfo_width(), widget.winfo_height()
            new_im = im_.crop((x, y, x + width, y + height))
            image = sg.tk.PhotoImage(data=image_to_data(new_im))
            images.append(image)
            label = sg.tk.Label(widget, image=image, padx=0, pady=0, bd=0, bg=bg)
            label.place(x=0, y=0)
            label.lower()
        for widget in widgets:
            find_frames(widget)

    size = window.size
    im_ = Image.open(file).resize(size)
    root = window.TKroot
    widgets = list(root.children.values())
    x0, y0 = root.winfo_rootx(), root.winfo_rooty()

    frame = sg.tk.Frame(root, padx=0, pady=0, bd=0, bg=bg)
    frame.place(x=0, y=0)
    images = []
    image = sg.tk.PhotoImage(data=image_to_data(im_))
    images.append(image)
    label = sg.tk.Label(frame, image=image, padx=0, pady=0, bd=0, bg=bg)
    label.pack()
    main_frame.Widget.master.place(in_=frame, anchor='center', relx=.5, rely=.5)
    frame.lower()
    frame.update()
    for widget in widgets:
        find_frames(widget)


bg = sg.theme_background_color()
background_image_file = os.path.join(os.getcwd(), '50.jpg')
size = (500, 750)

sg.set_options(dpi_awareness=True)

frame = [
    [sg.Text('欢迎使用图片采集', background_color='pink', font='Helvetica 18')],
    [sg.Input(justification='center', size=10, key='name'),
     sg.Text('← 图名,数量(默认为60,可不填) →', justification='center', background_color='black'),
     sg.Input(justification='center', size=10, key='num')],
    [sg.Button('OK', key='OK')],
    [sg.Button('Exit', key='Exit')]
]
# Need only one frame here to move it to center of window
layout = [[sg.Frame('', frame, border_width=0, key='FRAME', background_color=bg)]]

location = sg.Window.get_screen_size()
window = sg.Window('Background Demo', layout, margins=(0, 0), grab_anywhere=True,
                   size=size, keep_on_top=True, finalize=True,
                   no_titlebar=True,
                   transparent_color=bg,
                   )

images = []
make_background(window, background_image_file, window['FRAME'])

while True:
    event, values = window.read()
    if event in (sg.WINDOW_CLOSED, 'Cancel', 'Exit'):
        break
    if event == 'OK':
        # 获取用户输入的值
        if str(window['num'].get()).isdigit():
            init(window['name'].get(), int(window['num'].get()))
        else:
            init(window['name'].get())
        loop.run_until_complete(small_main(window['name'].get()))
        window['name'].update('采集完毕~')
        window['num'].update('请查收~')
        url_list = []
        k = 0

    print(event)

window.close()

图片替换为自己的图片即可,分辨率也可以根据图片大小来调节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

逸A

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

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

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

打赏作者

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

抵扣说明:

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

余额充值