tao/modules/tao_img_save_thread.py

57 lines
2.8 KiB
Python

from PyQt5.QtCore import QThread, pyqtSignal
import requests
from PIL import Image
from io import BytesIO
import os
import logging
# 로거 인스턴스 가져오기
logger = logging.getLogger('default_logger')
class TaobaoImageSaveThread(QThread):
progress_updated = pyqtSignal(int, int) # 전체 수, 현재 진행 수
def __init__(self, db_connection, image_save_folder, parent=None):
super(TaobaoImageSaveThread, self).__init__(parent)
self.db_connection = db_connection
self.image_save_folder = image_save_folder
os.makedirs(self.image_save_folder, exist_ok=True)
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"DNT": "1", # Do Not Track 요청 헤더
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1", # https로의 업그레이드를 요청
"Cache-Control": "max-age=0", # 캐시된 콘텐츠를 재사용하지 않도록 요청
}
def run(self):
logger.debug("타오바오 이미지 저장 쓰레드 시작")
cursor = self.db_connection.cursor()
cursor.execute("SELECT id, itemID, imageUrl FROM Taobao WHERE imageUrl IS NOT NULL")
rows = cursor.fetchall()
total_images = len(rows)
for idx, (id, itemID, imageUrl) in enumerate(rows):
try:
response = requests.get(imageUrl, headers=self.headers)
if response.status_code == 200:
image = Image.open(BytesIO(response.content))
image_file_name = f"{itemID}_{id}.png"
image_path = os.path.join(self.image_save_folder, image_file_name)
image.save(image_path, format='PNG')
logger.debug(f"이미지 저장 완료: {image_path}")
logger.debug(f"이미지 저장 완료: {image_path}")
# DB에 로컬 이미지 경로 업데이트 (예제 코드는 실제 DB 업데이트 로직을 포함하지 않음)
cursor.execute("UPDATE Taobao SET tao_localimage = ? WHERE id = ?", (image_path, id))
self.db_connection.commit()
else:
logger.debug(f"이미지 다운로드 실패: {imageUrl}")
except Exception as e:
logging.error(f"이미지 저장 중 오류 발생 {imageUrl}: {e}")
self.progress_updated.emit(total_images, idx + 1)