巩固爬虫和数据库使用技巧

本次我们将对国际现货与期货石油价格、美元人民币汇率、美元指数等数据的实时监控,采样频率为一小时一次。

提取数据网址:

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()



编程部分完成,接下来只需等待数据写入数据库中,附上我程序运行结果图:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值