我正在创建一个基于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}$所以我的主要问题是:
XVFB包装器在这里合适吗?我可以在不同的主机上在生产中使用这个设置吗。这在我当地的流浪箱里不管用吗?
main()线程问题-这是线程问题还是没有连接回xvfb服务器?这个问题可以用芹菜或类似的东西解决吗?
这是做我想做的事的适当方式吗?我见过很多其他的解决方案,包括scrapyjs、spynner、selenium等等,但它们看起来要么过于复杂,要么基于QT。一个更好的问题是这些替代包是否解决main()线程问题?
谢谢你的帮助!在
好的,这里的解决方案是使用twill,如本文所述http://twill.idyll.org/python-api.html-我可以在没有xvfb包装器的情况下运行它,它比以前的方法快得多,开销也小得多。我可以推荐这个。在
相关问题 更多 >
编程相关推荐