【问题标题】:Python GUI Scraper hanging issuesPython GUI Scraper 挂起问题
【发布时间】:2011-02-14 16:50:50
【问题描述】:

我不久前使用 python 编写了一个爬虫,它在命令行中运行良好。我现在已经为应用程序制作了一个 GUI,但是我遇到了一个问题。当我尝试更新 gui 内的文本时(例如“获取 URL 12/50”),我无法看到刮板中的函数正在抓取 100 多个链接。此外,当从一个抓取功能转到一个应该更新 gui 的功能时,再到另一个功能时,在运行下一个抓取功能时似乎会跳过 gui 更新功能。一个例子是:

scrapeLinksA() #takes 20 seconds
updateInfo("LinksA done")
scrapeLinksB() #takes another 20 seconds

在上面的例子中,updateInfo 永远不会执行,除非我用 KeyboardInterrupt 结束程序。

我认为我的解决方案是线程,但我不确定。我该怎么做才能解决这个问题?

我正在使用:

  • PyQt4
  • urllib2
  • 美汤

【问题讨论】:

    标签: python pyqt4 urllib2 beautifulsoup screen-scraping


    【解决方案1】:

    我建议使用QNetworkAccessManager 以非阻塞方式下载网站。这是一种不同的方法,因此您可能会重写应用程序的处理部分。无需等到页面下载后才能解析它,而是有多个较小的函数,通过信号连接,并在某些事件发生时执行它们(例如“页面已下载”)。

    【讨论】:

      【解决方案2】:

      Lukáš Lalinský 的回答非常好。

      另一种可能性是使用PyQt threads

      如果问题仅仅是“更新”部分(而不是异步处理的需要),请尝试调用:

      QCoreApplication.processEvents()
      

      scrapeLinksAscrapeLinksB 之间查看是否有帮助(它会暂时中断主事件循环以查看是否有其他(例如绘制请求)待处理)。

      如果不是,请提供updateInfo的来源。

      【讨论】:

        猜你喜欢
        • 2019-04-05
        • 1970-01-01
        • 2015-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-23
        • 1970-01-01
        相关资源
        最近更新 更多