「使用Django中的QT刮板一次能成功,但下次运行时会崩溃,因为QApplication没有在main()线程中创建」

2024-06-28 19:59:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个基于Django的scraper,用户可以在其中输入搜索词。我使用这个搜索词来构建一个URL并查询站点,然后返回未呈现的HTML和JS。然后我可以接受post请求,通过创建一个Qwebpage来呈现页面,将URL传递给它并获取框架的呈现HTML。这一次在我的Django应用程序中有效,下一次POST请求会导致站点崩溃。在

我首先关心的是,在当前的设置中,我被迫使用xvfb运行包装器来运行。当我部署时,这是否会带来一个问题-更好的问题是:我可以在生产中使用xvfb包装器吗?在

有了它,我可以提出一个帖子请求,这返回我正在寻找的页面。如果我回击并发送另一个请求,我会在控制台中看到以下错误,然后关闭/管理.py服务器:

WARNING: QApplication was not created in the main() thread.
QObject::connect: Cannot connect (null)::configurationAdded(QNetworkConfiguration) to QNetworkConfigurationManager::configurationAdded(QNetworkConfiguration)
QObject::connect: Cannot connect (null)::configurationRemoved(QNetworkConfiguration) to QNetworkConfigurationManager::configurationRemoved(QNetworkConfiguration)
QObject::connect: Cannot connect (null)::configurationChanged(QNetworkConfiguration) to QNetworkConfigurationManager::configurationChanged(QNetworkConfiguration)
QObject::connect: Cannot connect (null)::onlineStateChanged(bool) to QNetworkConfigurationManager::onlineStateChanged(bool)
QObject::connect: Cannot connect (null)::configurationUpdateComplete() to QNetworkConfigurationManager::updateCompleted()
Segmentation fault (core dumped)

我承认,我不知道这里有什么特别的错误,因为我对线程概念相当陌生。我不确定这个错误是否意味着它不能重新连接到已经在运行的xvfb包装器,或者确实是线程问题。曾经有效的代码就在这里。由于我不想显示我实际正在抓取的站点,所以这一点略有改变。另外,我不想在这个示例中寻找数据。此示例只需将呈现的HTML作为测试带到您的浏览器中:

^{pr2}$

所以我的主要问题是:

  1. XVFB包装器在这里合适吗?我可以在不同的主机上在生产中使用这个设置吗。这在我当地的流浪箱里不管用吗?

  2. main()线程问题-这是线程问题还是没有连接回xvfb服务器?这个问题可以用芹菜或类似的东西解决吗?

  3. 这是做我想做的事的适当方式吗?我见过很多其他的解决方案,包括scrapyjs、spynner、selenium等等,但它们看起来要么过于复杂,要么基于QT。一个更好的问题是这些替代包是否解决main()线程问题?

谢谢你的帮助!在


Tags: todjangourl站点mainhtmlconnect错误