吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3248|回复: 14
收起左侧

[Python 转载] 用PyQt5显示爬虫进度的示例

  [复制链接]
thepoy 发表于 2020-10-19 22:26
本帖最后由 thepoy 于 2020-10-19 23:02 编辑

[Python] 纯文本查看 复制代码
class GUI(QWidget):
    def __init__(self):
        super(GUI, self).__init__()
        self.tasks_lbl = QLabel("待处理数量:100,完成进度:0 %", self)
        # self.tasks_lbl.adjustSize()
        self.tasks_lbl.resize(550, 24)
        self.tasks_lbl.move(210, 10)

    def initUI(self):
        # self.setFixedSize(500, 90)
        self.resize(800, 150)
        self.center()

        self.main_widget = QWidget(self)
        self.progressBar = QProgressBar(self.main_widget)
        self.progressBar.setGeometry(QRect(20, 60, 760, 50))

        self.setWindowTitle("爬虫")

        self.thread_1 = Worker()
        self.thread_1.progressBarValue.connect(self.spider)
        self.thread_1.update_task_lbl.connect(self.task)
        self.thread_1.start()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def spider(self, i):
        self.progressBar.setValue(i)

    def task(self, remain: int, percent: int):
        if percent < 100:
            self.tasks_lbl.setText(f"待处理数量:{remain},完成进度:{percent} %")
        else:
            self.tasks_lbl.setText("全部任务处理完成")
            self.tasks_lbl.resize(600, 24)
            # print(self.tasks_lbl.size())
            self.tasks_lbl.move(125, 10)


class Worker(QThread):
    progressBarValue = pyqtSignal(int)
    update_task_lbl = pyqtSignal(int, int)

    def __init__(self):
        super(Worker, self).__init__()

        self.excel_file = "./名录.xlsx"
        self.df = pd.read_excel(self.excel_file)

    def run(self):
        for idx, row in self.df.iterrows():
            result = Spider(row["column1"]).result
            self.progressBarValue.emit(((idx + 1) * 100) // self.df["column1"].count())  # 发送进度条的值 信号
            self.update_task_lbl.emit(self.df["column1"].count() - idx - 1,
                                      ((idx + 1) * 100) // self.df["column1"].count())  # 更新进度数量
            if result:
                self.df.loc[idx, ["column2", "column3", "column4"]] = [result.get("address"), result.get("email"), result.get("phone")]
        self.df.to_excel("结果.xlsx", index=False)


适当修改即可使用。

上面只是PyQT相关代码,其他代码就不提供了,下面的图片是示例:
Qlabel文字显示不全,可以调整label宽度微调,我懒得调了。
而且pyqt5的代码虽然能跨系统使用,但显示效果不同,不同系统上还得再调。
gw451.gif

免费评分

参与人数 6吾爱币 +12 热心值 +6 收起 理由
chaser_LC + 1 + 1 我很赞同!
hshcompass + 1 + 1 热心回复!
苏紫方璇 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
细水流长 + 1 + 1 热心回复!
Zeaf + 1 + 1 我很赞同!
huayugongju + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| thepoy 发表于 2020-10-20 12:34
Loker 发表于 2020-10-20 11:17
我用pyqt5写了个评价工具,最后还是感觉H5好用,代码重新推了用flask写了个web版本。用pyqt写界面感觉很混 ...

是flask/django + 浏览器的形式写的吗?
 楼主| thepoy 发表于 2020-10-19 23:13
boxer 发表于 2020-10-19 23:02
python写界面还是用HTML好些吧, 毕竟学会一个简单的HTML, 一万种语言都一样写法

我也这么想过,但是没有具体的思路,就先用PyQt5实现了
头像被屏蔽
细水流长 发表于 2020-10-19 22:39
 楼主| thepoy 发表于 2020-10-19 22:51
细水流长 发表于 2020-10-19 22:39
想问下楼主,有没有比较好的pyqt5教程,pyqt5是不是不好学呀

python的GUI都不算好学,我对pyqt5也就是有问题找谷歌,没有系统地学过
boxer 发表于 2020-10-19 23:02
python写界面还是用HTML好些吧, 毕竟学会一个简单的HTML, 一万种语言都一样写法
apoul 发表于 2020-10-20 07:15
学习了感谢分享
ciker_li 发表于 2020-10-20 08:18
感谢分享
Loker 发表于 2020-10-20 11:17
我用pyqt5写了个评价工具,最后还是感觉H5好用,代码重新推了用flask写了个web版本。用pyqt写界面感觉很混乱。。
Loker 发表于 2020-10-20 20:34
thepoy 发表于 2020-10-20 12:34
是flask/django + 浏览器的形式写的吗?

我学过一段时间Django,感觉还是flask适合小项目。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 07:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表