python相关工具代码之网络图片下载并显示出下载图片保存到的地址

2023-12-14 18:03:21
# coding=utf-8
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import time
import random
import os
import urllib.request
from bs4 import BeautifulSoup

'''
信号传参类型
pyqtSignal()                               #无参数信号
pyqtSignal(int)                            # 一个参数(整数)的信号 
pyqtSignal([int],[str]                     # 一个参数(整数或者字符串)重载版本的信号
pyqtSignal(int,str)                        #二个参数(整数,字符串)的信号 
pyqtSignal([int,int],[int,str])          #二个参数([整数,整数]或者[整数,字符串])重载版本
'''


class Mythread(QThread):
    # 定义信号,定义参数为str类型
    # breakSignal = pyqtSignal(str, list)
    aaaSignal = pyqtSignal(str,list)

    def __init__(url, parent=None):
        super().__init__(parent)

    def set_url(self,url):
        self.url = url
    def get_img_urls(self):

        try:
            html = urllib.request.urlopen(self.url).read()
            soup = BeautifulSoup(html, 'html.parser')
            img_tags = soup.find_all('img')
            img_urls = [img['src'] for img in img_tags if img.get('src')]
            return img_urls
        except Exception as e:
            print("Error occurred: ", e)
            return []

    def run(self):

        img_urls=self.get_img_urls()

        self.download_imgs(img_urls)

    def download_imgs(self,img_urls):
        folder = r'E:\PYthon\python_基础\Python_learn\101_python学习相关\jpg_download'
        os.makedirs(folder, exist_ok=True)
        stop = 1
        if stop:
            for i, img_url in enumerate(img_urls):
                i += 1
                # time.sleep(1)
                try:
                    file_path = os.path.join(folder, f"image_{i}.jpg")
                    urllib.request.urlretrieve(img_url, file_path)
                    txt = f"Downloaded {img_url} {file_path}"
                    print(txt)
                    print(i)
                    self.aaaSignal.emit(txt, [file_path])
                except Exception as e:
                    failed_txt = f'Failed to download {img_url} {e}'
                    print(failed_txt)
                    self.aaaSignal.emit(failed_txt, img_urls)
        # 让程序休眠
        time.sleep(1)

if __name__ == '__main__':
    app = QApplication([])
    dlg = QDialog()
    dlg.resize(400, 300)
    dlg.setWindowTitle("下载图片界面")
    dlgLayout = QVBoxLayout()
    dlgLayout.setContentsMargins(40, 40, 40, 40)
    btn = QPushButton('测试按钮')
    stop_btn = QPushButton('STOP')
    load_bth = QPushButton('load')
    dlgLayout.addWidget(btn)
    dlgLayout.addWidget(stop_btn)
    dlgLayout.addStretch(40)
    dlg.setLayout(dlgLayout)
    dlg.show()
    textEdit = QTextEdit()
    dlgLayout.addWidget(textEdit)


    thread = Mythread()

    def stop():
        global stop
        stop = 0
        thread.run = 0
        btn.setText("停止下载")
        print('下载停止')

    def downing_txt(i,img_urls):
        btn.setText(i)

    def jpg_load(txt,img_urls):

        txt_show='\n'.join(img_urls)
        textEdit.setText(txt_show)


    stop_btn.clicked.connect(stop)
    # 创建线程
    # # 注册信号处理函数
    # thread.breakSignal.connect(chuli)
    # thread.aaaSignal.connect(downing_txt)
    thread.aaaSignal.connect(jpg_load)
    # # 启动线程
    url = "https://www.oldboyedu.com"
    img_urls = thread.set_url(url)
    # thread.download_imgs(img_urls)
    thread.start()
    app.exec_()
    dlg.exec_()
    app.exit()

文章来源:https://blog.csdn.net/xtpyc/article/details/134982562
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。