class CetizenWindow(QMainWindow): def __init__(self, parent=None): super().__init__(parent) conn = sqlite3.connect('cetizen.db') self.db = DBHandler(conn) self.ui = loadUi('cetizen.ui', self) self.logger.setText('') self.table.setAlternatingRowColors(True) #self.table.setRootIsDecorated(False) self.setWindowTitle('Cetizen Crawler') self.ui.show() @pyqtSlot() def slot_pno_select(self): df = self.db.getTableAll('상품정보') n = df.shape[0] rows = QStandardItemModel(n, 4, self) rows.setHeaderData(0, Qt.Horizontal, '통신사') rows.setHeaderData(1, Qt.Horizontal, '상품코드') rows.setHeaderData(2, Qt.Horizontal, '상품명') rows.setHeaderData(3, Qt.Horizontal, '모델명') for i in range(n): for j in range(4): rows.setData(rows.index(i, j), df.iloc[i, j]) self.table.setModel(rows) @pyqtSlot() def slot_pno_insert(self): self.logger.append('-- 상품정보 수집 시작 -- {}'.format(datetime.now())) pno_crawler = PnoCrawler() df = pno_crawler.crawling(save=True) self.logger.append('-- 상품정보 수집 완료 -- {}'.format(datetime.now())) self.db.insTable('상품정보', df) self.logger.append('-- 상품정보 적재 완료 -- {}'.format(datetime.now())) @pyqtSlot() def slot_pno_delete(self): self.db.delTableAll('상품정보') self.logger.append('-- 상품정보 삭제 완료 -- {}'.format(datetime.now())) @pyqtSlot() def slot_rel_select(self): df = self.db.getTableAll('출고가정보') n = df.shape[0] rows = QStandardItemModel(n, 3, self) rows.setHeaderData(0, Qt.Horizontal, '상품코드') rows.setHeaderData(1, Qt.Horizontal, '기준일자') rows.setHeaderData(2, Qt.Horizontal, '출고가') for i in range(n): for j in range(3): rows.setData(rows.index(i, j), str(df.iloc[i, j])) self.table.setModel(rows) @pyqtSlot() def slot_rel_insert(self): self.logger.append('-- 출고가정보 수집 시작 -- {}'.format(datetime.now())) pno = list(self.db.getTableAll('상품정보')['PNO'])[:10] release_price_crawler = ReleasePriceCrawler(pno) df = release_price_crawler.crawling(save=True) self.logger.append('-- 출고가정보 수집 완료 -- {}'.format(datetime.now())) self.db.insTable('출고가정보', df) self.logger.append('-- 출고가정보 적재 완료 -- {}'.format(datetime.now())) @pyqtSlot() def slot_rel_delete(self): self.db.delTableAll('출고가정보') self.logger.append('-- 출고가정보 삭제 완료 -- {}'.format(datetime.now())) @pyqtSlot() def slot_used_select(self): df = self.db.getTableAll('중고가정보') n = df.shape[0] rows = QStandardItemModel(n, 5, self) rows.setHeaderData(0, Qt.Horizontal, '상품코드') rows.setHeaderData(1, Qt.Horizontal, '기준일자') rows.setHeaderData(2, Qt.Horizontal, '저가') rows.setHeaderData(3, Qt.Horizontal, '중간') rows.setHeaderData(4, Qt.Horizontal, '고가') for i in range(n): for j in range(5): rows.setData(rows.index(i, j), str(df.iloc[i, j])) self.table.setModel(rows) @pyqtSlot() def slot_used_insert(self): self.logger.append('-- 중고가정보 수집 시작 -- {}'.format(datetime.now())) pno = list(self.db.getTableAll('상품정보')['PNO'])[:10] used_price_crawler = UsedPriceCrawler(pno) df = used_price_crawler.crawling(save=True) self.logger.append('-- 중고가정보 수집 완료 -- {}'.format(datetime.now())) self.db.insTable('중고가정보', df) self.logger.append('-- 중고가정보 적재 완료 -- {}'.format(datetime.now())) @pyqtSlot() def slot_used_delete(self): self.db.delTableAll('중고가정보') self.logger.append('-- 중고가정보 삭제 완료 -- {}'.format(datetime.now()))
# DB 연결 conn = sqlite3.connect('cetizen.db') db = DBHandler(conn) db.delTableAll('상품정보') db.delTableAll('출고가정보') db.delTableAll('중고가정보') db.commit() # 상품정보 수집 pno_crawler = PnoCrawler() df = pno_crawler.crawling() db.insTable('상품정보', df) # 상품코드 목록 추출 pno = list(db.getTableAll('상품정보')['PNO']) # 출고가정보 수집 release_price_crawler = ReleasePriceCrawler(pno[:3]) df = release_price_crawler.crawling() db.insTable('출고가정보', df) # 중고가정보 수집 used_price_crawler = UsedPriceCrawler(pno[:3]) df = used_price_crawler.crawling() db.insTable('중고가정보', df) print('--done--')