我尝试使用以下代码从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)。
非常感谢任何帮助!
答案 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)