pyqt5 + pyinstaller 制作爬虫小程序

 

环境:mac python3.7 pyqt5 pyinstaller

ps: 主要是熟悉pyqt5, 加入了单选框 输入框 文本框 文件夹选择框及日历下拉框

效果图:

 

pyqt5 主程序文件 

# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date:   2019-07-10 13:02:56
# @Last Modified by:   Mehaei
# @Last Modified time: 2019-07-15 16:43:18
import os
import uuid
import sys
import time
import json
from PyQt5.QtGui import QRegExpValidator, QIntValidator
from PyQt5.QtCore import QDate, QBasicTimer, QRegExp
from PyQt5.QtWidgets import (QWidget, QDesktopWidget, QApplication, QMessageBox, QPushButton, QLabel, QLineEdit, QGridLayout, QComboBox,QDateTimeEdit, QFileDialog, QProgressBar, QTextEdit)from worker import Workerclass Example(QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.initUI()def initUI(self):# 主窗口大小self.resize(500, 400)self.center()self.cwd = os.getcwd()url = QLabel('url')proxy = QLabel("proxy")count = QLabel("count")start_time = QLabel("start_time")end_time = QLabel("end_time")data_dir = QLabel("data_dir")shop_info = QLabel("shop_info")self.shopEdit = QTextEdit()# 文件选择框self.btn_chooseDir = QPushButton(self)self.btn_chooseDir.setObjectName("btn_chooseDir")self.btn_chooseDir.setText("choose dir")self.btn_chooseDir.clicked.connect(self.slot_btn_chooseDir)# url正则验证 仅限amazonurl_regex = QRegExp(r'http[s]{0,1}://www.amazon.+')url_line_re = QRegExpValidator(self)url_line_re.setRegExp(url_regex)self.urlEdit = QLineEdit()self.urlEdit.setPlaceholderText("Please product url")self.urlEdit.setValidator(url_line_re)# 下拉框self.proxyCom = QComboBox()self.proxyCom.addItem("adsl(default)")self.proxyCom.addItem("None")self.countEdit = QLineEdit()self.countEdit.setText("100")int_limit = QIntValidator(self)int_limit.setRange(1, 50000)self.countEdit.setValidator(int_limit)self.startdateEdit = QDateTimeEdit(QDate.currentDate(), self)self.startdateEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")self.startdateEdit.setCalendarPopup(True)self.startdateEdit.dateChanged.connect(self.get_start_date)self.enddateEdit = QDateTimeEdit(QDate.currentDate(), self)self.enddateEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")self.enddateEdit.setCalendarPopup(True)self.enddateEdit.dateChanged.connect(self.get_end_date)self.shopbtn = QPushButton('Shop', self)# self.btn.move(40, 80)
        self.shopbtn.clicked.connect(self.get_shop)self.reviewbtn = QPushButton('Review', self)# self.btn.move(40, 80)
        self.reviewbtn.clicked.connect(self.get_review)grid = QGridLayout()grid.setSpacing(5)grid.addWidget(url, 1, 0)grid.addWidget(self.urlEdit, 1, 1, 1, 4)grid.addWidget(proxy, 2, 0)grid.addWidget(self.proxyCom, 2, 1)grid.addWidget(count, 2, 2, 1, 2)grid.addWidget(self.countEdit, 2, 4)grid.addWidget(start_time, 3, 0)grid.addWidget(self.startdateEdit, 3, 1)grid.addWidget(end_time, 3, 2, 1, 2)grid.addWidget(self.enddateEdit, 3, 4)grid.addWidget(data_dir, 4, 0)grid.addWidget(self.btn_chooseDir, 4, 1)grid.addWidget(shop_info, 5, 0)grid.addWidget(self.shopEdit, 5, 1, 5, 5)grid.addWidget(self.pbar, 10, 0, 1, 5)grid.addWidget(self.shopbtn, 11, 0, 1, 2)grid.addWidget(self.reviewbtn, 11, 3, 1, 2)self.setLayout(grid) self.setWindowTitle('Amazon Crawl')self.show()def center(self):qr = self.frameGeometry()cp = QDesktopWidget().availableGeometry().center()qr.moveCenter(cp)self.move(qr.topLeft())def get_start_date(self):dateTime = self.startdateEdit.dateTime()def get_end_date(self):dateTime = self.enddateEdit.dateTime()def slot_btn_chooseDir(self):self.dir_choose = QFileDialog.getExistingDirectory(self,"Choose data save dir",self.cwd) # 起始路径if self.dir_choose == "":return Falseself.btn_chooseDir.setText(self.dir_choose)def warning(self, title, content):QMessageBox.warning(self, title, content)def get_shop(self):try:self.dir_chooseexcept Exception:self.dir_choose = "./data/"params = {"id": str(uuid.uuid4()).replace("-", ""),"url": self.urlEdit.text(),"proxy_type": self.proxyCom.currentText(),"count": self.countEdit.text(),"start_time": self.time_to_time_stamp(self.startdateEdit.text()),"end_time": self.time_to_time_stamp(self.enddateEdit.text()),"data_save_dir": self.dir_choose}if not params["url"]:self.warning("Url is Null", "Please input product url")return Falseself.work = Worker(**params)self.shop_detail = self.work.start(shop=True, product_detail=None)self.shopEdit.setText(json.dumps(self.shop_detail, indent=4))def get_review(self):try:self.shop_detailexcept Exception as e:self.warning("Product info is Null", "Please get product info")return Falseself.work.start(shop=False, product_detail=self.shop_detail)QMessageBox.information(self,"Review done","%s review crawl done, count:%s, Save to: %s" % (self.urlEdit.text(), self.amazon.cralwer_data_num, self.amazon.file_data_pname) if self.amazon.cralwer_data_num else "%s review crawl done, count:%s" % (self.urlEdit.text(), self.amazon.cralwer_data_num))def closeEvent(self, event):reply = QMessageBox.question(self, 'Message',"Are you sure to quit?", QMessageBox.Yes |QMessageBox.No, QMessageBox.No)if reply == QMessageBox.Yes:event.accept()else:event.ignore()def time_to_time_stamp(self, time_value):time_array = time.strptime(time_value, "%Y-%m-%d %H:%M:%S")return int(time.mktime(time_array) * 1000)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

 

仅个人学习参考, 如有疑问,欢迎交流

--------------------------------

 

 

 

 

 

转载于:https://www.cnblogs.com/mswei/p/11189916.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过学校区域

通过学校区域的要求 应观察前后左右的交通情况,适时减速慢行,不得鸣喇叭和与学生抢行。 操作方法 当驾驶车辆行至学校附近或有注意儿童标志路段时,一定要及时减速,注意观察道路两侧或周围的情况,时刻堤防学生横…

axios中出现两次请求,OPTIONS请求和GET请求

在项目中发现ajax中出现两次请求,OPTIONS请求和GET请求 查看到浏览器NetWork有两次请求,请求url一样: 查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别。 XMLHttpRequest会遵守同源策略(same-origin policy). 也即脚本只能访问相同协…

笔试面试收获(持续更新中)

1. Internet 是有ARPANET发展而来 2. NFS(Network File System)即网络文件系统 3. OSI参考模型七层:物理层,数据链路层,网络层(IP,路由器,三层交换机),传输层&#xff…

Linux 安装 配置 Maven

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.需要提前安装JDK,并且配置环境变量 请参考:https://blog.csdn.net/jiangyu1013/article/details/84321146 2.…

Threading in C#

这里推荐一些C#编程多线程的学习资料: http://knowledge.swanky.wu.googlepages.com/threading_in_c_sharp.html Ebook in English:http://cid-068f7d75d8585700.skydrive.live.com/self.aspx/ebook/threading.pdf 一些demo:http://cid-068f7…

经理人如何与这“六种人”打交道?

在职场中,我们要与不同身份、不同年龄、不同岗位、不同性别、不同性格的人打交道。在平时的实际工作接触中,善于与不同人打交道的经理人,会根据不同的情况用不同的态度和方式来对待之。 1、如何与死板的人打交道 与这样的人交往&#xff0c…

[Git高级教程 (一)] 通过 Tag 标签回退版本修复 bug

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1 前言 本系列之所以取名”Git高级教程”,主要是教大家解决实际工作中遇到的问题,要求读者会基本的Git用法和命令…

Javascript 自定义输出

缘由 前段时间再看了一些javascript的学习资料,也写的一些demo,在输出的时候一般都用alert,但这个方法会打断函数运行,用起来不是很好.还有就是console.log这个方法,这种方法原来一直以为只能在FireFox上面才能用,现在才发现主流浏览器都支持.但我的这个插件已经写的差不多了,所…

不要打2岁内和6岁后的孩子 父母必看

一位妈妈说:“孩子经常无理取闹,到超市就要买这买那,不给买就坐在地上哭闹。到别人家去就乱翻乱动,还会到人家沙发上乱蹦,无论你怎么说,孩子都不听话。每次我都会气不打一处来,回到家就痛打一顿…

设计模式之开放封闭原则

以下皆是个人理解如有不对请留言指出,谢谢! 我就代码提出我自己个人的看法: 正常定义一个类例如银行工作员,他可以执行存款,付款和转账功能,如果在现有功能上我想添加贷款功能,需要在类中添加…

[Git高级教程(二)] 远程仓库版本回退方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客。 2 问题 如果提交了…

uplift model学习笔记

一、解决的问题: 通常的 Propensity Model 和 Response Model 只是给目标用户打了个分,并没有确保模型的结果可以使得活动的提升最大化;它没有告诉市场营销人员,哪个用户最有可能提升活动响应; 因此,需要另…

必须看透的50个错觉 人生要看透而不看破!

我们应该感谢命运的多喘,是它用历练使一颗脆弱心的渐渐变得坚强,变得对一切都充满了向往。无可否认,只有真正的经历了一些事物之后,你才会对人生看得更加透彻,才会对世间真情感悟的更加真切。 1、个人只能被现实改变…

设计模式之依赖倒置原则

在传统的过程式中,上层依赖于底层,当底层变化,上层也得跟着做出相应的变化。这就是面向过程的思想,弊端就是导致程序的复用性降低并且提高了开发的成本。 而面向对象的开发则很好的解决了这个问题,让用户程序依赖于抽象…

@Transactional 详解

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Transactional 是声明式事务管理 编程中使用的注解 1 .添加位置 1)接口实现类或接口实现方法上,而不是接口类中…

LiveGBS高性能GB28181国标流媒体服务流传输模式支持UDP、TCP被动、TCP主动模式

LiveGBS国标(GB28181)流媒体服务软件: 提供用户管理及Web可视化页面管理; 提供设备状态管理,可实时查看设备是否掉线等信息; 实时流媒体处理,PS(TS)转ES; 设备状态监测、云台控制、录…

通过人行横道线

学车中的通过人行横道线 人行横道线,俗称斑马线,是由一条一条的白色线组成的,主要是用来让行人穿越马路的。 驾驶员驾驶车辆通过人行横道时应该减速缓行,注意礼让行人。 考核要求 当驾车进入路面有施划人行横道线的&#xf…

python学习-38迭代器和生成器

迭代器和生成器---- 迭代器协议和for循环工作机制1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往后走,不能往前走&#xff09…

[转载]基于Aaf的数据拆分

(本文适于使用Aaf框架的开发者阅读) 1. 基本原理 在Aaf框架中,“对象”和“存储”的关系映射有一个关键的纽带StorageAlias,即“存储别名”,同样一个类型,在不同的存储别名下,可以自由映射到任意存储“位置”。  “位…

靠边停车

什么是靠边停车 靠边停车是大路考中一个指标很明确的考核项目,要求学员驾驶车辆使之靠边停下。 操作方法 1、停车前,要通过内、外后视镜观察后方和右侧交通情况,开右转向灯。 2、适量踩下制动踏板。 3、向右转动方向盘(第一把轮…