from PyQt5.QtCore import QThread, pyqtSignal from naverParser import parse_naver_shopping import sqlite3 import time, json from random import randint import logging # 로거 인스턴스 가져오기 logger = logging.getLogger('default_logger') class ScrapingThread(QThread): progress_updated = pyqtSignal(int, int) def __init__(self, conn, keywords, isBranch, branchCount, json_data, overPrice, sortcount, parent=None): super(ScrapingThread, self).__init__(parent) self.conn = conn self.keywords = keywords self.overPrice = overPrice self.sortcount = sortcount self.isBranch = isBranch self.branchCount = branchCount # naver_code가 아닌 naver_codes로 변수명 변경하여 리스트 처리를 명시 self.json_data = json_data # self.codes = codes # JSON 데이터와 카테고리 초기화 # self.categories = {"category1Name": {}, "category2Name": {}, "category3Name": {}, "category4Name": {}} # self.json_data = self.loadJsonData() def run(self): total_items = len(self.keywords) # for idx, keyword in enumerate(self.keywords): for idx, keyword in enumerate(self.keywords): logger.debug("네이버쇼핑 스크래핑 쓰레드 시작") # try: # naver_code = self.naver_codes[idx] # idx를 사용하여 해당 키워드에 맞는 naver_code를 선택 # except IndexError: # logging.error(f"IndexError: 'naver_codes' 리스트의 길이가 충분하지 않습니다. idx={idx}") # naver_code = "" # 기본 naver_code 값을 설정하거나 오류 처리 parse_naver_shopping(idx, keyword, self.isBranch, self.branchCount, self.json_data, self.conn, self.overPrice, self.sortcount) current_progress = idx + 1 self.progress_updated.emit(total_items, current_progress) sleep_time_for_scraping = randint(1, 4) time.sleep(sleep_time_for_scraping) logger.debug(f"{idx}/{total_items} 상품 진행 완료") # def loadJsonData(self): # try: # with open("Percenty_SS_Code.json", "r", encoding='utf-8') as file: # for line in file: # item = json.loads(line) # # 'category3Name'과 'category4Name'의 '$numberDouble':"NaN"을 처리 # if isinstance(item.get("category3Name"), dict) and "$numberDouble" in item["category3Name"]: # item["category3Name"] = "" # 또는 None 사용 # if isinstance(item.get("category4Name"), dict) and "$numberDouble" in item["category4Name"]: # item["category4Name"] = "" # 또는 None 사용 # self.json_data.append(item) # except FileNotFoundError: # logger.info("Percenty_SS_Code.json 파일을 찾을 수 없습니다.") # logger.debug("Percenty_SS_Code.json 파일을 찾을 수 없습니다.") # self.json_data = [] # 파일이 없을 경우 빈 리스트 할당 # def loadCategories(self): # self.categories = {"category1Name": {}, "category2Name": {}, "category3Name": {}, "category4Name": {}} # try: # for item in self.json_data: # cat1 = item.get("category1Name") # cat2 = item.get("category2Name") # cat3 = item.get("category3Name", None) # cat4 = item.get("category4Name", None) # # category3Name과 category4Name 처리 # cat3 = item.get("category3Name", None) # cat4 = item.get("category4Name", None) # if isinstance(cat3, dict) and "$numberDouble" in cat3: # cat3 = None # "$numberDouble":"NaN"일 경우 None으로 처리 # if isinstance(cat4, dict) and "$numberDouble" in cat4: # cat4 = None # "$numberDouble":"NaN"일 경우 None으로 처리 # # 계층 구조 구축 # if cat1 not in self.categories["category1Name"]: # self.categories["category1Name"][cat1] = {"category2Name": {}} # if cat2 and cat2 not in self.categories["category1Name"][cat1]["category2Name"]: # self.categories["category1Name"][cat1]["category2Name"][cat2] = {"category3Name": {}} # if cat3 and cat3 not in self.categories["category1Name"][cat1]["category2Name"][cat2]["category3Name"]: # self.categories["category1Name"][cat1]["category2Name"][cat2]["category3Name"][cat3] = {"category4Name": {}} # if cat4: # self.categories["category1Name"][cat1]["category2Name"][cat2]["category3Name"][cat3]["category4Name"][cat4] = True # except Exception as e: # logger.info(f"카테고리 로딩 에러 {e}") # logger.debug(f"카테고리 로딩 에러 {e}") # return