我编写了一个小的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
答案 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)