Python GUI Scraper悬挂问题

时间:2010-05-02 05:16:47

标签: python pyqt4 urllib2 beautifulsoup screen-scraping

我曾经使用python写过一个刮刀,它在命令行中工作正常。我现在为应用程序制作了一个GUI,但是我遇到了一个问题。当我尝试更新gui中的文本时(例如'获取URL 12/50'),我无法看到刮板中的功能正在抓取100多个链接。此外,当从一个抓取功能转到应该更新gui的函数到另一个函数时,在运行下一个scrape函数时似乎跳过了gui update函数。一个例子是:

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

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

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

我正在使用:

  • PyQt4的
  • 的urllib2
  • BeautifulSoup

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

另一种可能性是使用PyQt threads

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

QCoreApplication.processEvents()
scrapeLinksAscrapeLinksB之间

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

如果没有,请向我们提供updateInfo的来源。