diff --git a/gui33.py b/gui33.py index 977454e..e438dc3 100644 --- a/gui33.py +++ b/gui33.py @@ -1,4 +1,4 @@ -from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QDialog +from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QDialog from PySide6.QtCore import Qt import sqlite3 import sys @@ -12,6 +12,7 @@ class ProductViewer(QWidget): self.product_index = 0 self.products = self.load_products() self.total_products = len(self.products) + self.resize(600, 680) # 윈도우 크기를 고정 (1024x768) # UI 초기화 self.init_ui() @@ -27,23 +28,27 @@ class ProductViewer(QWidget): # 중간 레이아웃에 여러 개의 SearchResultCard를 추가 self.middle_layout = QHBoxLayout() - self.search_result_cards = [SearchResultCard(i+1) for i in range(5)] + self.search_result_cards = [SearchResultCard(i+1) for i in range(4)] for card in self.search_result_cards: - self.middle_layout.addWidget(card) + self.middle_layout.addWidget(card, 2) + # card.setFixedHeight(300) # 각 카드의 크기를 고정 main_layout.addLayout(self.middle_layout) # 하단 레이아웃 self.bottom_layout = QHBoxLayout() self.left_button = QPushButton("◀") + self.left_button.setFixedSize(200,30) self.left_button.clicked.connect(self.previous_product) self.page_button = QPushButton(f"{self.product_index + 1}/{self.total_products}") + self.page_button.setFixedSize(150,30) self.page_button.clicked.connect(self.show_product_dialog) self.right_button = QPushButton("▶") + self.right_button.setFixedSize(200,30) self.right_button.clicked.connect(self.next_product) - self.bottom_layout.addWidget(self.left_button) - self.bottom_layout.addWidget(self.page_button) - self.bottom_layout.addWidget(self.right_button) + self.bottom_layout.addWidget(self.left_button, 3) + self.bottom_layout.addWidget(self.page_button, 1) + self.bottom_layout.addWidget(self.right_button, 3) main_layout.addLayout(self.bottom_layout) self.setLayout(main_layout) @@ -59,33 +64,29 @@ class ProductViewer(QWidget): # 현재 상품 데이터를 로드하여 ProductCard에 설정 product = self.products[self.product_index] product_name = product[1] - product_price = product[4] product_img_url = product[2] - self.product_card.set_data(name=product_name, price=product_price, img_url=product_img_url) - print(f"product : {product}") - print(f"product_name : {product_name}") - print(f"product_price : {product_price}") - print(f"product_img_url : {product_img_url}") + product_tag = product[3] + product_price = product[4] + product_cat = product[5] + + self.product_card.set_data(name=product_name, price=product_price, tag=product_tag, cat=product_cat, img_url=product_img_url) # SearchResultCard 초기화 및 데이터 로드 self.reset_search_result_cards() # 이전 카드 데이터 리셋 search_results = self.load_search_results(product[0]) - print(f"search_results : {search_results}") for i, result in enumerate(search_results): if i < len(self.search_result_cards): title = result[1] - print(f"{i}번째 title : {title}") price = result[3] - print(f"{i}번째 price : {price}") source = result[2] - print(f"{i}번째 source : {source}") img_url = result[4] - print(f"{i}번째 img_url : {img_url}") - self.search_result_cards[i].set_data(name=title, price=price, source=source, img_url=img_url) + is_selected = result[5] # DB에서 is_selected 값을 가져옴 + self.search_result_cards[i].set_data(name=title, price=price, source=source, img_url=img_url, is_selected=is_selected, cursor=self.cursor) # 페이지 버튼 텍스트 업데이트 self.page_button.setText(f"{self.product_index + 1}/{self.total_products}") + def reset_search_result_cards(self): # 각 SearchResultCard를 초기화 for card in self.search_result_cards: @@ -93,9 +94,8 @@ class ProductViewer(QWidget): def load_search_results(self, product_id): # DB에서 search_results 테이블의 데이터를 로드 - cursor = self.conn.cursor() - cursor.execute("SELECT * FROM search_results WHERE product_id=?", (product_id,)) - return cursor.fetchall() + self.cursor.execute("SELECT * FROM search_results WHERE product_id=?", (product_id,)) + return self.cursor.fetchall() def previous_product(self): if self.product_index > 0: @@ -127,7 +127,7 @@ class ProductViewer(QWidget): elif event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter: self.show_product_dialog() - def select_card(self, index): + def select_card(self, index, cursor): # 선택된 카드의 UI 갱신 및 데이터베이스 업데이트 for i, card in enumerate(self.search_result_cards): if i == index: diff --git a/imgSearcher.py b/imgSearcher.py index f55140f..e79af3c 100644 --- a/imgSearcher.py +++ b/imgSearcher.py @@ -36,13 +36,17 @@ class BaiduImageSearcher: }) self.initial_url = 'https://graph.baidu.com/pcpage/index?tpl_from=pc' - upload_button_xpath = '//*[@id="app"]/div/div[1]/div[7]/div/span[1]/span[1]' + # upload_button_xpath = '//*[@id="app"]/div/div[1]/div[7]/div/span[1]/span[1]' self.logger.info("goto URL") # self.page.route("**/*", lambda route, request: route.abort() if request.resource_type in ["image", "stylesheet", "font"] else route.continue_()) + # # self.page.goto(self.initial_url) # 최초 접속 URL + # self.goto_initialPage() + # self.page.wait_for_selector(upload_button_xpath) + + def goto_initialPage(self): self.page.goto(self.initial_url) # 최초 접속 URL - self.page.wait_for_selector(upload_button_xpath) def close_browser(self): # 브라우저 종료 @@ -77,15 +81,18 @@ class BaiduImageSearcher: # 첫 번째 검색과 이후 검색의 선택자를 다르게 설정 # if self.is_first_search: - if self.is_first_search: - self.logger.info("is_first_search") - upload_button_xpath = '//*[@id="app"]/div/div[1]/div[7]/div/span[1]/span[1]' - upload_input_xpath = '//*[@id="app"]/div/div[1]/div[7]/div/div/div[2]/div[2]/div/form/input' - self.is_first_search = False # 이후 검색에서는 일반 선택자를 사용 - else: - self.logger.info("another search") - upload_button_xpath = '//*[@id="app"]/div/div[1]/div/div[1]/div/div/div[1]/span[1]/span[1]' - upload_input_xpath = '//*[@id="app"]/div/div[1]/div/div[1]/div/div/div[1]/div/div[2]/div[2]/div/form/input' + # if self.is_first_search: + # self.logger.info("is_first_search") + # upload_button_xpath = '//*[@id="app"]/div/div[1]/div[7]/div/span[1]/span[1]' + # upload_input_xpath = '//*[@id="app"]/div/div[1]/div[7]/div/div/div[2]/div[2]/div/form/input' + # # self.is_first_search = False # 이후 검색에서는 일반 선택자를 사용 + # else: + # self.logger.info("another search") + # upload_button_xpath = '//*[@id="app"]/div/div[1]/div/div[1]/div/div/div[1]/span[1]/span[1]' + # upload_input_xpath = '//*[@id="app"]/div/div[1]/div/div[1]/div/div/div[1]/div/div[2]/div[2]/div/form/input' + + upload_button_xpath = '//*[@id="app"]/div/div[1]/div[7]/div/span[1]/span[1]' + upload_input_xpath = '//*[@id="app"]/div/div[1]/div[7]/div/div/div[2]/div[2]/div/form/input' # 이미지 업로드 버튼 클릭 및 파일 업로드 self.page.wait_for_selector(upload_button_xpath) @@ -129,7 +136,9 @@ class BaiduImageSearcher: content = None self.logger.info("검색 결과 페이지에서 JSON 데이터 추출") content = self.page.content() - + + self.page.go_back() # 뒤로 가기 + soup = BeautifulSoup(content, 'html.parser') script_tag = soup.select_one("html > head > script:nth-of-type(2)") @@ -167,8 +176,7 @@ class BaiduImageSearcher: "original_url": original_url }) self.logger.info("product_info 추출 완료") - self.logger.info(f"{product_info}") - input("로그를 확인한 후 아무 키나 눌러서 계속하세요...") + self.logger.info(f"추출된 정보 \n{product_info}") return product_info except json.JSONDecodeError as e: diff --git a/mainProcessor.py b/mainProcessor.py index 575bf3d..f9cecb7 100644 --- a/mainProcessor.py +++ b/mainProcessor.py @@ -63,6 +63,9 @@ class MainProcessor: while attempt < max_retries: # upload_image 메서드 실행 및 성공 여부 확인 + self.image_searcher.goto_initialPage() + self.logger.debug(f"검색페이지로 가기") + is_success_upload_image = self.image_searcher.upload_image(image_path) if not is_success_upload_image: attempt += 1 @@ -80,14 +83,14 @@ class MainProcessor: # 검색 결과 추출 search_results = self.image_searcher.extract_product_data() - if not search_results: - attempt += 1 - self.logger.warning(f"Extract product data failed for Product ID [{product_id}]. Retry {attempt}/{max_retries}") - time.sleep(1) - continue # 재시도 시 루프를 다시 시작 + # if search_results == []: # 빈 리스트일 경우만 실패로 간주 + # attempt += 1 + # self.logger.warning(f"Extract product data failed for Product ID [{product_id}]. Retry {attempt}/{max_retries}") + # time.sleep(1) + # continue # 재시도 시 루프를 다시 시작 # 모든 작업이 성공하면 루프 종료 - if is_success_upload_image and is_success_expand_results and search_results: + if is_success_upload_image and is_success_expand_results: break else: # 재시도 횟수 초과 시 경고 로그 출력 및 다음 제품으로 이동 @@ -95,6 +98,8 @@ class MainProcessor: continue # 성공 시 검색 결과를 DB에 저장 + self.logger.debug(f"Insert DB: {product_id}") + self.db_manager.insert_search_results(product_id, search_results) os.remove(image_path) diff --git a/productCard.py b/productCard.py index 2c85e59..bb1f640 100644 --- a/productCard.py +++ b/productCard.py @@ -1,55 +1,82 @@ -from PySide6.QtWidgets import QWidget, QGridLayout, QLabel +from PySide6.QtWidgets import QWidget, QVBoxLayout, QGridLayout, QLabel from PySide6.QtGui import QPixmap from PySide6.QtCore import Qt import requests class ProductCard(QWidget): - def __init__(self, index=1): + def __init__(self): super().__init__() - self.setFixedSize(220, 300) - self.layout = QGridLayout(self) + # self.setFixedSize(800, 300) + + + # 외부 위젯으로 감싸서 테두리 적용 + container_widget = QWidget(self) + container_layout = QVBoxLayout(container_widget) + self.layout = QGridLayout() + + # 테두리 스타일 적용 + container_widget.setStyleSheet("border: 2px solid black;") # UI 요소 초기화 - self.index_label = QLabel(str(index)) - self.index_label.setAlignment(Qt.AlignCenter) - self.index_label.setStyleSheet("font-weight: bold; font-size: 16px;") + self.info1_label = QLabel('검색 상품') + self.info1_label.setAlignment(Qt.AlignCenter) + self.info1_label.setStyleSheet("font-weight: bold; font-size: 16px;") + + self.info2_label = QLabel('상품 정보') + self.info2_label.setAlignment(Qt.AlignCenter) + self.info2_label.setStyleSheet("font-weight: bold; font-size: 16px;") self.image_label = QLabel() - self.image_label.setFixedSize(200, 140) + self.image_label.setFixedSize(250, 250) self.name_label = QLabel("상품명:") self.name_value = QLabel("") - self.name_value.setWordWrap(True) - self.name_value.setFixedSize(120, 50) self.price_label = QLabel("가격:") self.price_value = QLabel("") - self.select_label = QLabel("미선택") - self.select_label.setAlignment(Qt.AlignCenter) - self.select_label.setStyleSheet("font-weight: bold; color: black;") + self.tag_label = QLabel("태그:") + self.tag_value = QLabel("") - # 레이아웃 구성 - self.layout.addWidget(self.index_label, 0, 0, 1, 2) - self.layout.addWidget(self.image_label, 1, 0, 1, 2) - self.layout.addWidget(self.name_label, 2, 0) - self.layout.addWidget(self.name_value, 2, 1) - self.layout.addWidget(self.price_label, 3, 0) - self.layout.addWidget(self.price_value, 3, 1) - self.layout.addWidget(self.select_label, 4, 0, 1, 2) + self.cat_label = QLabel("카테고리:") + self.cat_value = QLabel("") + + # 그리드 레이아웃 구성 + self.layout.addWidget(self.info1_label, 0, 0, 1, 1) + self.layout.addWidget(self.info2_label, 0, 1, 1, 4) + self.layout.addWidget(self.image_label, 1, 0, 4, 1) + + # 각 정보 라벨과 값 배치 + self.layout.addWidget(self.name_label, 1, 2, 1, 1) + self.layout.addWidget(self.name_value, 1, 3, 1, 1) + self.layout.addWidget(self.price_label, 2, 2, 1, 1) + self.layout.addWidget(self.price_value, 2, 3, 1, 1) + self.layout.addWidget(self.tag_label, 3, 2, 1, 1) + self.layout.addWidget(self.tag_value, 3, 3, 1, 1) + self.layout.addWidget(self.cat_label, 4, 2, 1, 1) + self.layout.addWidget(self.cat_value, 4, 3, 1, 1) + + + container_layout.addLayout(self.layout) def reset(self): """카드의 데이터를 초기화합니다.""" self.name_value.setText("") self.price_value.setText("") + self.tag_value.setText("") + self.cat_value.setText("") self.image_label.clear() - self.set_selected(False) - def set_data(self, name, price, img_url): + def set_data(self, name, price, tag, cat, img_url): """카드에 상품 데이터를 설정합니다.""" self.name_value.setText(name) - self.price_value.setText(str(price)) + # self.price_value.setText(str(price)) + self.price_value.setText(f"{price:,}원") + + self.tag_value.setText(tag) + self.cat_value.setText(cat) + # self.price_value.setText(str(price)) # 이미지 설정 pixmap = QPixmap() @@ -69,99 +96,3 @@ class ProductCard(QWidget): except Exception as e: print(f"Image download error: {e}") return None - - def set_selected(self, selected): - """카드의 선택 상태를 설정합니다.""" - if selected: - self.select_label.setText("선택") - self.select_label.setStyleSheet("font-weight: bold; color: red;") - self.setStyleSheet("border: 2px solid red;") - else: - self.select_label.setText("미선택") - self.select_label.setStyleSheet("font-weight: bold; color: black;") - self.setStyleSheet("border: 1px solid grey;") - - -class SearchResultCard(QWidget): - def __init__(self, index=1): - super().__init__() - self.setFixedSize(220, 300) - self.layout = QGridLayout(self) - - # UI 요소 초기화 - self.index_label = QLabel(str(index)) - self.index_label.setAlignment(Qt.AlignCenter) - self.index_label.setStyleSheet("font-weight: bold; font-size: 16px;") - - self.image_label = QLabel() - self.image_label.setFixedSize(200, 140) - - self.name_label = QLabel("상품명:") - self.name_value = QLabel("") - self.name_value.setWordWrap(True) - self.name_value.setFixedSize(120, 50) - - self.price_label = QLabel("가격:") - self.price_value = QLabel("") - - self.source_label = QLabel("출처:") - self.source_value = QLabel("") - - self.select_label = QLabel("미선택") - self.select_label.setAlignment(Qt.AlignCenter) - self.select_label.setStyleSheet("font-weight: bold; color: black;") - - # 레이아웃 구성 - self.layout.addWidget(self.index_label, 0, 0, 1, 2) - self.layout.addWidget(self.image_label, 1, 0, 1, 2) - self.layout.addWidget(self.name_label, 2, 0) - self.layout.addWidget(self.name_value, 2, 1) - self.layout.addWidget(self.price_label, 3, 0) - self.layout.addWidget(self.price_value, 3, 1) - self.layout.addWidget(self.source_label, 4, 0) - self.layout.addWidget(self.source_value, 4, 1) - self.layout.addWidget(self.select_label, 5, 0, 1, 2) - - def reset(self): - """카드의 데이터를 초기화합니다.""" - self.name_value.setText("") - self.price_value.setText("") - self.source_value.setText("") - self.image_label.clear() - self.set_selected(False) - - def set_data(self, name, price, source, img_url): - """카드에 검색 결과 데이터를 설정합니다.""" - self.name_value.setText(name) - self.price_value.setText(price) - self.source_value.setText(source) - - # 이미지 설정 - pixmap = QPixmap() - img_data = self.download_image_data(img_url) - if img_data: - pixmap.loadFromData(img_data) - self.image_label.setPixmap(pixmap.scaled(self.image_label.size(), Qt.KeepAspectRatio)) - else: - self.image_label.clear() - - def download_image_data(self, img_url): - """이미지 URL에서 데이터를 다운로드합니다.""" - try: - response = requests.get(img_url) - if response.status_code == 200: - return response.content - except Exception as e: - print(f"Image download error: {e}") - return None - - def set_selected(self, selected): - """카드의 선택 상태를 설정합니다.""" - if selected: - self.select_label.setText("선택") - self.select_label.setStyleSheet("font-weight: bold; color: red;") - self.setStyleSheet("border: 2px solid red;") - else: - self.select_label.setText("미선택") - self.select_label.setStyleSheet("font-weight: bold; color: black;") - self.setStyleSheet("border: 1px solid grey;") diff --git a/products.db b/products.db new file mode 100644 index 0000000..f50437e Binary files /dev/null and b/products.db differ diff --git a/searchResultCard.py b/searchResultCard.py index f3389e0..7c690bf 100644 --- a/searchResultCard.py +++ b/searchResultCard.py @@ -3,89 +3,10 @@ from PySide6.QtGui import QPixmap from PySide6.QtCore import Qt import requests - -class ProductCard(QWidget): - def __init__(self, index=1): - super().__init__() - self.setFixedSize(220, 300) - self.layout = QGridLayout(self) - - # UI 요소 초기화 - self.index_label = QLabel(str(index)) - self.index_label.setAlignment(Qt.AlignCenter) - self.index_label.setStyleSheet("font-weight: bold; font-size: 16px;") - - self.image_label = QLabel() - self.image_label.setFixedSize(200, 140) - - self.name_label = QLabel("상품명:") - self.name_value = QLabel("") - self.name_value.setWordWrap(True) - self.name_value.setFixedSize(120, 50) - - self.price_label = QLabel("가격:") - self.price_value = QLabel("") - - self.select_label = QLabel("미선택") - self.select_label.setAlignment(Qt.AlignCenter) - self.select_label.setStyleSheet("font-weight: bold; color: black;") - - # 레이아웃 구성 - self.layout.addWidget(self.index_label, 0, 0, 1, 2) - self.layout.addWidget(self.image_label, 1, 0, 1, 2) - self.layout.addWidget(self.name_label, 2, 0) - self.layout.addWidget(self.name_value, 2, 1) - self.layout.addWidget(self.price_label, 3, 0) - self.layout.addWidget(self.price_value, 3, 1) - self.layout.addWidget(self.select_label, 4, 0, 1, 2) - - def reset(self): - """카드의 데이터를 초기화합니다.""" - self.name_value.setText("") - self.price_value.setText("") - self.image_label.clear() - self.set_selected(False) - - def set_data(self, name, price, img_url): - """카드에 상품 데이터를 설정합니다.""" - self.name_value.setText(name) - self.price_value.setText(price) - - # 이미지 설정 - pixmap = QPixmap() - img_data = self.download_image_data(img_url) - if img_data: - pixmap.loadFromData(img_data) - self.image_label.setPixmap(pixmap.scaled(self.image_label.size(), Qt.KeepAspectRatio)) - else: - self.image_label.clear() - - def download_image_data(self, img_url): - """이미지 URL에서 데이터를 다운로드합니다.""" - try: - response = requests.get(img_url) - if response.status_code == 200: - return response.content - except Exception as e: - print(f"Image download error: {e}") - return None - - def set_selected(self, selected): - """카드의 선택 상태를 설정합니다.""" - if selected: - self.select_label.setText("선택") - self.select_label.setStyleSheet("font-weight: bold; color: red;") - self.setStyleSheet("border: 2px solid red;") - else: - self.select_label.setText("미선택") - self.select_label.setStyleSheet("font-weight: bold; color: black;") - self.setStyleSheet("border: 1px solid grey;") - - class SearchResultCard(QWidget): def __init__(self, index=1): super().__init__() - self.setFixedSize(220, 300) + self.setFixedSize(160, 300) self.layout = QGridLayout(self) # UI 요소 초기화 @@ -94,12 +15,14 @@ class SearchResultCard(QWidget): self.index_label.setStyleSheet("font-weight: bold; font-size: 16px;") self.image_label = QLabel() - self.image_label.setFixedSize(200, 140) + # self.image_label.setFixedSize(140, 120) + self.image_label.setFixedHeight(120) self.name_label = QLabel("상품명:") self.name_value = QLabel("") self.name_value.setWordWrap(True) - self.name_value.setFixedSize(120, 50) + # self.name_value.setFixedSize(120, 50) + self.name_value.setFixedHeight(50) self.price_label = QLabel("가격:") self.price_value = QLabel("") @@ -128,12 +51,12 @@ class SearchResultCard(QWidget): self.price_value.setText("") self.source_value.setText("") self.image_label.clear() - self.set_selected(False) + self.set_selected(False, None) # 기본 선택 해제 상태로 초기화 - def set_data(self, name, price, source, img_url): - """카드에 검색 결과 데이터를 설정합니다.""" + def set_data(self, name, price, source, img_url, is_selected, cursor): + """카드에 검색 결과 데이터를 설정하고 선택 상태를 적용합니다.""" self.name_value.setText(name) - self.price_value.setText(price) + self.price_value.setText(f"{price}원") self.source_value.setText(source) # 이미지 설정 @@ -145,6 +68,9 @@ class SearchResultCard(QWidget): else: self.image_label.clear() + # 선택 상태에 따라 UI 업데이트 + self.set_selected(is_selected, cursor) + def download_image_data(self, img_url): """이미지 URL에서 데이터를 다운로드합니다.""" try: @@ -155,8 +81,9 @@ class SearchResultCard(QWidget): print(f"Image download error: {e}") return None - def set_selected(self, selected): - """카드의 선택 상태를 설정합니다.""" + def set_selected(self, selected, cursor): + """카드의 선택 상태를 설정하고 데이터베이스를 업데이트합니다.""" + # 선택 상태에 따라 스타일 및 텍스트 변경 if selected: self.select_label.setText("선택") self.select_label.setStyleSheet("font-weight: bold; color: red;") @@ -165,3 +92,11 @@ class SearchResultCard(QWidget): self.select_label.setText("미선택") self.select_label.setStyleSheet("font-weight: bold; color: black;") self.setStyleSheet("border: 1px solid grey;") + + # 데이터베이스에 선택 상태 업데이트 + if cursor is not None: + try: + cursor.execute("UPDATE search_results SET is_selected = ? WHERE id = ?", (1 if selected else 0, self.index)) + cursor.connection.commit() # 변경 사항 커밋 + except Exception as e: + print(f"Error updating selection in database: {e}") diff --git a/temp/1.jpg b/temp/1.jpg new file mode 100644 index 0000000..3352e48 Binary files /dev/null and b/temp/1.jpg differ diff --git a/temp/13.jpg b/temp/13.jpg new file mode 100644 index 0000000..f967300 Binary files /dev/null and b/temp/13.jpg differ diff --git a/temp/22.jpg b/temp/2.jpg similarity index 100% rename from temp/22.jpg rename to temp/2.jpg diff --git a/temp/24.jpg b/temp/24.jpg deleted file mode 100644 index c1f575f..0000000 Binary files a/temp/24.jpg and /dev/null differ diff --git a/temp/29.jpg b/temp/29.jpg deleted file mode 100644 index 3d9c5a5..0000000 Binary files a/temp/29.jpg and /dev/null differ diff --git a/temp/31.jpg b/temp/31.jpg new file mode 100644 index 0000000..3352e48 Binary files /dev/null and b/temp/31.jpg differ diff --git a/temp/32.jpg b/temp/32.jpg new file mode 100644 index 0000000..ccba796 Binary files /dev/null and b/temp/32.jpg differ diff --git a/temp/33.jpg b/temp/33.jpg new file mode 100644 index 0000000..f967300 Binary files /dev/null and b/temp/33.jpg differ diff --git a/temp/34.jpg b/temp/34.jpg new file mode 100644 index 0000000..1479afc Binary files /dev/null and b/temp/34.jpg differ diff --git a/temp/35.jpg b/temp/35.jpg new file mode 100644 index 0000000..fc83751 Binary files /dev/null and b/temp/35.jpg differ diff --git a/temp/36.jpg b/temp/36.jpg new file mode 100644 index 0000000..623b0e6 Binary files /dev/null and b/temp/36.jpg differ diff --git a/temp/37.jpg b/temp/37.jpg new file mode 100644 index 0000000..6466e23 Binary files /dev/null and b/temp/37.jpg differ diff --git a/temp/38.jpg b/temp/38.jpg new file mode 100644 index 0000000..589918a Binary files /dev/null and b/temp/38.jpg differ diff --git a/temp/39.jpg b/temp/39.jpg new file mode 100644 index 0000000..a910d8c Binary files /dev/null and b/temp/39.jpg differ diff --git a/temp/40.jpg b/temp/40.jpg new file mode 100644 index 0000000..8ed7fe2 Binary files /dev/null and b/temp/40.jpg differ diff --git a/temp/41.jpg b/temp/41.jpg new file mode 100644 index 0000000..e69de29 diff --git a/test/db_del.py b/test/db_del.py new file mode 100644 index 0000000..28463d7 --- /dev/null +++ b/test/db_del.py @@ -0,0 +1,20 @@ +import sqlite3 + +def delete_rows_from_products(): + # 데이터베이스 연결 + conn = sqlite3.connect("products.db") + cursor = conn.cursor() + + try: + # id가 1부터 40까지인 행 삭제 + cursor.execute("DELETE FROM search_results WHERE product_id BETWEEN 11 AND 11") + conn.commit() # 변경 사항 저장 + print("1행부터 40행까지 삭제 완료.") + except sqlite3.Error as e: + print("데이터 삭제 중 오류 발생:", e) + finally: + # 데이터베이스 연결 종료 + conn.close() + +# 함수 호출 +delete_rows_from_products() diff --git a/test/test4.py b/test/test4.py index 7a04671..8158c7b 100644 --- a/test/test4.py +++ b/test/test4.py @@ -92,6 +92,7 @@ with sync_playwright() as p: url = "https://graph.baidu.com/pcpage/index?tpl_from=pc" page.goto(url) + for file_name in file_list: print(f"{file_name} 처리 중...") process_image(page, file_name)