2014-01-19 75 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

雖然我敢打賭,你會回來的早些時候與一些非工作的東西...... –