python qt4:再次引用和刮擦

时间:2016-11-23 04:19:24

标签: python qt4

我编写了一个小的python代码来抓取网页中的表格。它使用qt4来刮擦。现在,问题是我需要每隔5分钟继续抓取数据。我正在考虑刷新页面并再次刮擦。如何刷新网页并每5分钟再次刮一次? 下面是我用来刮的代码。

import sys  
from BeautifulSoup import BeautifulSoup
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import *  
from lxml import html 
import redis
from time import sleep

class Scraper(QWebPage):  
    def __init__(self, url):  
        self.app = QApplication(sys.argv)  
        QWebPage.__init__(self)  
        self.loadFinished.connect(self._loadFinished)  
        self.mainFrame().load(QUrl(url))  
        self.app.exec_()  
        #self.render = Scraper(url)

    def _loadFinished(self, result):  
        self.frame = self.mainFrame()  
        self.app.quit() 
    def close_app(self):
        self.app.quit()
        print "closed"

url = 'https://www.nseindia.com/live_market/dynaContent/live_analysis/top_gainers_losers.htm?cat=G' 

r = Scraper(url)  
result = r.frame.toHtml()
formatted_result = str(result.toAscii())
soup = BeautifulSoup(formatted_result)
table = soup.find(id="topGainers")

print table

2 个答案:

答案 0 :(得分:0)

查看此页面。 它为计划任务提供了一个非常轻量级的库,并且应该在Qt中正常工作。 How do I get a Cron like scheduler in Python?

但如果你担心你的GUI冻结,或者只想保留Qt中的所有原生,请查看:Background thread with QThread in PyQt

答案 1 :(得分:0)

您可以使用QtCore.QTimer.singleShot(5 * 60, func)功能。

def __init__(self, url):
   # ... 
   self.show_page()

def show_page(self)
   # display page here 

   QtCore.QTimer.singleShot(5 * 60, self.show_page)