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.pswp.cn/news/448318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448318.shtml
英文地址,請注明出處:http://en.pswp.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、向右轉動方向盤(第一把輪…