我希望使用url http://www.cavirtex.com/orderbook中的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发布于 2014-01-19 13:51:04
这里是从‘购买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上安装,从命令行运行:
pip install selenium (如果您已经拥有它,也可以使用pip install selenium --upgrade )。
如果您想要“出售BTC”表,请将"orderbook_buy“改为"orderbook_sell”。
如果希望使用“最后的交易”表,请将"orderbook_buy“更改为"orderbook_trades”。
注:
如果您认为性能非常关键,那么您可以通过URL连接而不是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,则上述代码应该可以工作。
请注意,根据您的防火墙配置,它在第一次尝试时可能会请求您的许可.
https://stackoverflow.com/questions/21217034
复制相似问题