2014-01-19 49 views
1

我正在寻找使用Python http://www.cavirtex.com/orderbook以外的Python刮取数据点。使用Python刮擦数据点

我期待刮数据点是最低投标报价,这在当前时刻如下:

<tr> 
<td><b>Jan. 19, 2014, 2:37 a.m.</b></td> 
<td><b>0.0775/0.1146</b></td> 
<td><b>860.00000</b></td> 
<td><b>66.65 CAD</b></td> 
</tr> 

相关的时刻作为860.00。我希望将其构建成一个脚本,可以发送电子邮件来提醒我与其他交易所相比有一定的价格差异。

我很小心,所以如果在你的解释中,你可以提供你的思考过程,为什么你做了某些事情将非常感激。

这是我迄今为止将正确返回标题的名称,但我无法抓取表格数据。

import urllib2, sys 
from bs4 import BeautifulSoup 

site= "http://cavirtex.com/orderbook" 
hdr = {'User-Agent': 'Mozilla/5.0'} 
req = urllib2.Request(site,headers=hdr) 
page = urllib2.urlopen(req) 
soup = BeautifulSoup(page) 
print soup.title 
+0

询问他们的API文档..你将有JSON的访问。 – abourget

回答

0

这里是刮从“购买BTC”表中的最低投标价的代码:

from selenium import webdriver 

fp = webdriver.FirefoxProfile() 
browser = webdriver.Firefox(firefox_profile=fp) 
browser.get('http://www.cavirtex.com/orderbook') 

lowest_bid = float('inf') 
elements = browser.find_elements_by_xpath('//div[@id="orderbook_buy"]/table/tbody/tr/td') 

for element in elements: 
    text = element.get_attribute('innerHTML').strip('<b>|</b>') 
    try: 
     bid = float(text) 
     if lowest_bid > bid: 
      lowest_bid = bid 
    except: 
     pass 

browser.quit() 
print lowest_bid 

为了您的Windows的PC上的Python安装硒,从命令运行line:

pip install selenium(或pip install selenium --upgrade如果你已经有了它)。

如果您想要“销售BTC”表,请将“orderbook_buy”更改为“orderbook_sell”。

如果您想要'Last Trades'表,请将“orderbook_buy”更改为“orderbook_trades”。

注:

如果考虑性能的关键,那么你就可以实现数据刮通过网址连接,而不是硒,并且让你的程序运行得更快。但是,由于繁琐的XML解析,您的代码可能最终会变得“更加混乱”,因此您将被迫应用...

这是用于从电子邮件中发送前一个输出的代码自己对自己说:

import smtplib,ssl 

def SendMail(username,password,contents): 
    server = Connect(username) 
    try: 
     server.login(username,password) 
     server.sendmail(username,username,contents) 
    except smtplib.SMTPException,error: 
     Print(error) 
    Disconnect(server) 

def Connect(username): 
    serverName = username[username.index("@")+1:username.index(".")] 
    while True: 
     try: 
      server = smtplib.SMTP(serverDict[serverName]) 
     except smtplib.SMTPException,error: 
      Print(error) 
      continue 
     try: 
      server.ehlo() 
      if server.has_extn("starttls"): 
       server.starttls() 
       server.ehlo() 
     except (smtplib.SMTPException,ssl.SSLError),error: 
      Print(error) 
      Disconnect(server) 
      continue 
     break 
    return server 

def Disconnect(server): 
    try: 
     server.quit() 
    except smtplib.SMTPException,error: 
     Print(error) 

serverDict = { 
    "gmail" :"smtp.gmail.com", 
    "hotmail":"smtp.live.com", 
    "yahoo" :"smtp.mail.yahoo.com" 
} 

SendMail("[email protected]_provider.com","your_password",str(lowest_bid)) 

如果您的电子邮件提供商或者是的Gmail的Hotmail雅虎上面的代码应该工作。

请注意,根据您的防火墙配置,它可以在你第一次尝试征求你的同意......

+0

太棒了,非常感谢你的帮助!我正在努力提高您的答案,但我缺乏声誉,非常感谢您的帮助! – mikestaubin

+0

NP,获得一些积分,并回到最高票:) –

+0

虽然我敢打赌,你会回来的早些时候与一些非工作的东西...... –