本次我们将对国际现货与期货石油价格、美元人民币汇率、美元指数等数据的实时监控,采样频率为一小时一次。
提取数据网址:
1.http://quote.eastmoney.com/gjqh/CONC.html(国际现货与期货石油价格)
2.http://finance.sina.com.cn/money/forex/hq/DINIW.shtml?qq-pf-to=pcqq.c2c(美元人民币汇率以及美元指数)
首先这两个网页均是动态的,因此提取我们想要的数据只要找到生成这些数据相应的js页面即可(分析浏览器抓包工具很快便可以找到):
把这些网页找到后,我们便开始分析哪些是我们需要的数据,如美元人名币汇率,第一项时间指的是美元人名币汇率最近发生变化的时间,第二项代表目前的汇率,后面代表前几次刷新的汇率,其他美元指数、原油指数分析方法与其类似···找到我们需要的数据后,直接用正则表达式便可提取出来了:
USDCNY = re.compile('var hq_str_USDCNY=".*?,(.*?),.*?";')
DINIW = re.compile('".*?,(.*?),.*?";')
CONC = re.compile('extendedFutures:\["0.00,0|0.00,0",".*?,(.*?),.*?"]')
这三个正则表达式将会匹配到我们需要的所有数据,接下来我们将这些数据放入数据库中:
def write_to_mysql():
try:
cxn = MySQLdb.connect(host='localhost', user='root', passwd='root',db='python') #与数据库建立连接
except:
print "Could not connect to MySQL server."
exit( 0 )<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>
cur = cxn.cursor()<span style="white-space:pre"> </span> #获取操作游标<span style="white-space:pre"> </span>
cur.execute("CREATE TABLE dollar(Local_time VARCHAR(20),USDCNH VARCHAR(8),DINIW VARCHAR(8))")<span style="white-space:pre"> </span>#创建一个dollar表,包含记录时间、汇率、美元指数三个参数
cur.execute("create table oil(Local_time VARCHAR(20),CONC VARCHAR(20))")<span style="white-space:pre"> </span> #创建一个oil表,包含记录时间、原油指数两个参数
print "数据写入数据库中..."
while 1:
value1 = []
value2 = []
result(value1,value2)<span style="white-space:pre"> </span> #调用result函数,获取我们从网页抓取的数据
cur.execute("INSERT INTO dollar VALUES(%s, %s,%s)" ,value1)<span style="white-space:pre"> </span> #将对应数据传入dollar表中
cur.execute("INSERT INTO oil VALUES(%s, %s)" ,value2)<span style="white-space:pre"> </span> #将对应数据传入oil表中
cxn.commit()<span style="white-space:pre"> </span> #提交
time.sleep(60*60)<span style="white-space:pre"> </span> #隔一个小时采样一次
cxn.close()<span style="white-space:pre"> </span> #关闭数据库连接
def result(value1,value2):
url1 = 'http://hq.sinajs.cn/?rn=1417610216083&list=AUDCHF,AUDHKD,AUDJPY,AUDUSD,CADHKD,CADJPY,CHFCAD,CHFHKD,DINIW,EURUSD,GBPEUR,GBPHKD,GBPUSD,USDCAD,USDCHF,USDCNY,USDHKD,USDJPY,gb_dji,gb_ixic,hf_C,hf_CAD,hf_CL,hf_GC,hf_S,hf_SI,int_hangseng,int_nikkei'
url2 = 'http://hq.sinajs.cn/?rn=1417610565584&list=DINIW'
url3 = 'http://hq2gjqh.eastmoney.com/em_futures2010numericapplication/index.aspx?type=f&id=CONC0&v=1417613016752&_=1417613016753'
html1 = requests.get(url1)
html2 = requests.get(url2)
html3 = requests.get(url3)
ISOTIMEFORMAT= '%Y-%m-%d %X'
value1.append(time.strftime(ISOTIMEFORMAT,time.localtime()))
value2.append(time.strftime(ISOTIMEFORMAT,time.localtime()))
USDCNY = re.compile('var hq_str_USDCNY=".*?,(.*?),.*?";').findall(html1.text)
DINIW = re.compile('".*?,(.*?),.*?";').findall(html2.text)
CONC = re.compile('extendedFutures:\["0.00,0|0.00,0",".*?,(.*?),.*?"]').findall(html3.text)
value1.append(USDCNY[0].encode('utf-8'))
value1.append(DINIW[0].encode('utf-8'))
value2.append(CONC[1].encode('utf-8'))
write_to_mysql()
编程部分完成,接下来只需等待数据写入数据库中,附上我程序运行结果图: