123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import sys
- from PyQt5 import QtWidgets, QtCore, QtGui
- from PyQt5.QtWidgets import QMessageBox
- from file_spider import imgfile_main_by_mongodb_with_thread_no_proxy
- class MyWindow(QtWidgets.QWidget):
- def __init__(self):
- super(MyWindow, self).__init__()
- self.resize(500, 100)
- self.setWindowTitle("Mouser爬虫 - 器件Logo")
- self.worker = MyWorker()
- _translate = QtCore.QCoreApplication.translate
-
- self.label = QtWidgets.QLabel(self)
- self.label.setObjectName("label")
- self.label.setText(_translate("Dialog", "<span style=\" font-weight:600;\">请输入账号</span>"))
- self.label.setFixedWidth(80)
- # 用户名输入框
- self.nameEdit = QtWidgets.QLineEdit(self)
- self.nameEdit.setObjectName("nameEdit")
-
- self.threadLabel = QtWidgets.QLabel(self)
- self.threadLabel.setObjectName("threadLabel")
- self.threadLabel.setText(_translate("Dialog", "<span style=\" font-weight:600;\">线程数</span>"))
- self.threadLabel.setFixedWidth(50)
- # 线程输入框
- self.threadEdit = QtWidgets.QLineEdit(self)
- self.threadEdit.setObjectName("threadEdit")
- self.threadEdit.setFixedWidth(50)
- self.threadEdit.setText('100')
- # 开始按钮
- self.startButton = QtWidgets.QPushButton(self)
- self.startButton.setObjectName("startButton")
- self.startButton.setText("开始")
- self.startButton.setFixedWidth(70)
- self.startButton.clicked.connect(self.start)
- # 取消按钮
- self.cancelButton = QtWidgets.QPushButton(self)
- self.cancelButton.setObjectName("cancelButton")
- self.cancelButton.setText("取消")
- self.cancelButton.setFixedWidth(70)
- self.cancelButton.clicked.connect(self.close)
- # 状态统计
- self.statLabel = QtWidgets.QLabel(self)
- self.statLabel.setObjectName("statLabel")
- # 布局
- self.grid = QtWidgets.QGridLayout(self)
- self.grid.addWidget(self.label, 1, 0)
- self.grid.addWidget(self.nameEdit, 1, 1)
- self.grid.addWidget(self.threadLabel, 1, 2)
- self.grid.addWidget(self.threadEdit, 1, 3)
- self.grid.addWidget(self.startButton, 1, 4)
- self.grid.addWidget(self.cancelButton, 1, 5)
- self.grid.addWidget(self.statLabel, 2, 0, 1, 6)
-
- # 信号
- self.worker.stat_signal.connect(self._update_stat)
-
- def _update_stat(self, succeed, failured, active, total):
- self.statLabel.setText("成功 %s,失败 %s,正在爬取 %s" % (succeed, failured, active))
-
- def start(self):
- name = self.nameEdit.text()
- thread = self.threadEdit.text()
- if len(name) == 0:
- QMessageBox.information(self, "提示", "请先输入您的账号,输入不存在的账号会自动创建")
- elif len(thread) == 0:
- QMessageBox.information(self, "提示", "请先输入您开启的线程数,比如100")
- else:
- self.nameEdit.setDisabled(True)
- self.threadEdit.setDisabled(True)
- self.startButton.setDisabled(True)
- self.worker.setName(name)
- self.worker.setThreadSize(int(thread))
- try:
- self.worker.start()
- except:
- None
- class MyWorker(QtCore.QThread):
- stat_signal = QtCore.pyqtSignal(int, int, int, int)
- def __init__(self, userName=None, threadSize=100):
- super(MyWorker, self).__init__()
- self.userName = userName
- self.threadSize = threadSize
-
- def setName(self, userName):
- self.userName = userName
-
- def setThreadSize(self, threadSize):
- self.threadSize = threadSize
-
- def run(self):
- spider = imgfile_main_by_mongodb_with_thread_no_proxy.ImgFileMain(userName=self.userName, maxThread=self.threadSize)
- while spider.hasNext():
- spider.craw()
- self.stat_signal.emit(*spider.statistic())
-
- if __name__ == "__main__":
- app = QtWidgets.QApplication(sys.argv)
- myshow = MyWindow()
- myshow.show()
- sys.exit(app.exec_())
-
|