使用python和PyQT4从bitcoincharts.com获取交易数据

时间:2014-04-21 11:20:19

标签: python pyqt4 scrape

我尝试使用以下代码从http://bitcoincharts.com/charts抓取交易数据:

import csv
import urllib2
import sys
import time
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import *  

class Render(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_()  

  def _loadFinished(self, result):  
    self.frame = self.mainFrame()  
    self.app.quit()

url = 'http://bitcoincharts.com/charts/bitstampUSD#rg2zig1-minztgSzm1g10zm2g25'
r = Render(url)

allSelector = 'a[onClick="load_table();return false;"]' 
allButton   = r.frame.documentElement().findFirst(allSelector)
allButton.evaluateJavaScript("this.onclick()")
html = allButton.webFrame().toHtml()

print html.toUtf8()

它模拟点击"加载原始数据"链接在页面上。当您在浏览器中单击该链接时,它会显示"正在加载..."几秒钟,然后是包含原始数据的表格。

代码生成的HTML不包含数据,但是" loading"对话。对我来说,似乎javascript解释器以某种方式超时,因为javascript函数应该生成数据或者没有数据返回。"成功完成后的对话框(您可以在网站HTML中找到javascript)。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我回答了类似这样的问题:HTML page vastly different when using a headless webkit implementation using PyQT

当“单击”按钮时,您必须等待一段时间才能加载ajax数据。添加如下代码:

for i in range(200): #wait 2 seconds
    app.processEvents()
    time.sleep(0.01)