我希望使用 Python 从 url http://www.cavirtex.com/orderbook 中抓取数据点.
我要抓取的数据点是最低出价,目前看起来是这样的:
<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
请您参考如下方法:
这是从“购买 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 的 Selenium,从命令行运行:
pip install selenium(或者 pip install selenium --upgrade 如果您已经安装了它)。
如果您想要“卖出 BTC”表格,请将“orderbook_buy”更改为“orderbook_sell”。
如果您想要“最后交易”表,则将“orderbook_buy”更改为“orderbook_trades”。
注意:
如果您认为性能很重要,那么您可以通过 URL-Connection 而不是 Selenium 来实现数据抓取,并让您的程序运行得更快。但是,由于您不得不应用繁琐的 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("your_username@your_provider.com","your_password",str(lowest_bid))
如果您的电子邮件提供商是 gmail 或 hotmail 或 yahoo,则上述代码应该有效。
请注意,根据您的防火墙配置,它可能会在您第一次尝试时征求您的许可...
