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

来源:互联网 发布:bilibili直播姬 mac 编辑:程序博客网 时间:2024/06/06 03:06

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

提取数据网址:

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



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




0 0
原创粉丝点击