我希望在网址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
答案 0 :(得分:1)
以下是从“购买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上安装Selenium for Python,请从命令行运行:
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 ,则上述代码应该有效。
请注意,根据您的防火墙配置,它可能会在您第一次尝试时征得您的同意...