| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import sys, json, time
- from pathlib import Path
- # from PyQt5.QtWidgets import (
- from PyQt6.QtWidgets import (
- QApplication, QWidget, QVBoxLayout, QHBoxLayout,
- QTextEdit, QPushButton, QLabel, QMessageBox
- )
- from PyQt6.QtCore import Qt, QThread, pyqtSignal
- # from PyQt5.QtCore import Qt, QThread, pyqtSignal
- # 引入你现有的函数
- from req import build_driver, scrape_item, save_to_excel, EXCEL_PATH
- class Worker(QThread):
- log = pyqtSignal(str)
- done = pyqtSignal()
- def __init__(self, urls):
- super().__init__()
- self.urls = urls
- def run(self):
- driver = build_driver()
- results = []
- try:
- for url in self.urls:
- if not url.strip():
- continue
- self.log.emit(f"开始抓取: {url}")
- info = scrape_item(driver, url.strip())
- results.append(info)
- self.log.emit(json.dumps(info, ensure_ascii=False))
- time.sleep(1.0)
- if results:
- save_to_excel(EXCEL_PATH, results)
- self.log.emit(f"写入完成:{EXCEL_PATH}")
- except Exception as e:
- self.log.emit(f"出错: {e}")
- finally:
- driver.quit()
- self.done.emit()
- class App(QWidget):
- def __init__(self):
- super().__init__()
- self.setWindowTitle("1688抓取")
- self.resize(800, 600)
- self.input = QTextEdit()
- self.input.setPlaceholderText("每行一个商品链接")
- self.log = QTextEdit()
- self.log.setReadOnly(True)
- self.btn = QPushButton("开始抓取")
- self.btn.clicked.connect(self.start)
- layout = QVBoxLayout()
- layout.addWidget(QLabel("商品链接:"))
- layout.addWidget(self.input, 3)
- layout.addWidget(self.btn)
- layout.addWidget(QLabel("日志:"))
- layout.addWidget(self.log, 4)
- self.setLayout(layout)
- self.worker = None
- def start(self):
- urls = [u for u in self.input.toPlainText().splitlines() if u.strip()]
- if not urls:
- QMessageBox.warning(self, "提示", "请先输入链接")
- return
- self.btn.setEnabled(False)
- self.worker = Worker(urls)
- self.worker.log.connect(self.append_log)
- self.worker.done.connect(self.finish)
- self.worker.start()
- def append_log(self, text):
- self.log.append(text)
- def finish(self):
- self.btn.setEnabled(True)
- self.log.append("任务完成")
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- w = App()
- w.show()
- sys.exit(app.exec())
- # sys.exit(app.exec_())
|