PyQt5和Scrapy开发可视化爬虫(二)

本文介绍如何使用PyQt5构建Scrapy爬虫的可视化界面,通过自定义继承QObject的signal类,子线程中定义信号,并在spider中发送信号到界面,利用CrawlerRunner在子线程启动爬虫。详细步骤包括信号绑定、槽函数的使用以及解决非主线程启动爬虫的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用PyQt5开发Scrapy爬虫的界面,利用CrawlerRunner启动爬虫,并利用PyQt5信号传递爬虫信息到界面

在上一篇Pyqt5和Scrapy开发可视化爬虫中,
使用了在Qt子线程中,利用subprocess开启一个终端进程来执行Scrapy启动命令,获取进程的标准输出,以实现向界面发送信息的功能。

但使用命令启动始终有很大的局限性,之前也试过用Crawler内部api启动,但苦于无法获取爬虫的当前运行情况,在研究了PyQt的多线程之后PYQT5开启多个线程和窗口,多线程与多窗口的交互,对于PyQt的信号,有了一个更深刻的理解。

之前在spider中无法使用pyqtsignal,是因为必须继承QObjct才能使用pyqtsignal,于是就将上篇博客中提到的方法利用起来,将自定义的pyqtsignal信号当成参数传递给爬虫spider,既可以在spider中发送信号给界面了。

1. 自定义继承QObject的signal类

class MySignal(QObject):
    """定义全局信号"""
    # 通用信号
    send_int = pyqtSignal(int)
    send_str = pyqtSignal(str)

    # 指定信号
    item_scraped = pyqtSignal()
    spider_closed = pyqtSignal()

2. 在子线程中定义signal变量

class RunThread(QRunnable):
    """child thread for spider task"""
    def __init__(self, spider_name, keyword, trans_key):
        super(RunThread, self).__init__(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值