Python定时爬取上证指数

Python定时爬取上证指数

作为一名初出茅庐的股民,在这中美贸易战的关键时刻,当然得实时关注我大A股的动向啦,所以就写了这只小爬虫~

  • 选择网站
    首先呢,各大网站都有A股指数的数据,但是对网易云的喜爱,让我选择了去爬 网易财经 ,就这样不地道的锁定了目标
    http://quotes.money.163.com/0000001.html
    然鹅,这是一个动态网站,数据都是实时更新,本人技术不够,没法用 requests 库来解决问题
    于是乎,就选择了 selenium 库来模拟浏览器,实时抓取数据
    网易财经
browser = webdriver.Firefox()
browser.get('http://quotes.money.163.com/0000001.html')

在这里选择的是火狐浏览器,只是因为自己用的习惯了而已…

  • 提取信息
    虽然大家都爱用 BeautifulSoup (美丽汤)来提取信息,但我习惯于用 xpath ,毕竟萝卜白菜,各有所爱嘛,合适的才是最好的,实现功能才是王道
    毕竟需要反复爬取数据,实时监控,就定义了一个函数,实现代码复用
def GetPrice(out_time,row):
    while 1:
        #获取当前页面源码
        html=browser.page_source
        #解析数据
        html_ele = etree.HTML(html)
        price = html_ele.xpath('/html/body/div[2]/div[1]/div[3]/table/tbody/tr/td[2]/div/table/tbody/tr[1]/td[1]/span/strong/text()')[0]
        nowTimes = time.strftime('%H.%M',time.localtime())
        print(nowTimes,price)
        #将数据写入xls表格
        sheet.write(row[0],0,nowTimes)
        sheet.write(row[0],1,float(price))
        row[0] = row[0]+1
        if float(nowTimes)>=out_time:
            print('时间到,下班喽')
            break
        time.sleep(60)

这里定义的两个传入数据 (out_time,row) ,第一个是爬虫结束的时间,第二个是 excel 写入时的行
print 语句是为了更好的交互,不然也不知道小爬虫在偷偷摸摸干嘛,还是得看着点
time.sleep(60) 每分钟爬一次,也别给人家服务器太大的压力了
细心的小伙伴可能已经发现了,在爬取数据的同时,也在存储数据了,这里没有选择 txt 文件,而是用 excel
毕竟如果要做图什么的,还是 excel 方便嘛

  • 存储数据
    利用 xlrd,xlwt 库来对 excel 文件进行读写
    #创建储存数据的表格
    row = [1]
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet("sheet")
    sheet.write(0,0,'时间')
    sheet.write(0,1,'上证指数')

row = [1] :因为数字类型是不可变的,而列表类型可变,如果直接用 row = 1 会导致在下午时间段爬取时, excel 数据被覆盖掉

  • 控制爬取过程
    毕竟傲娇的大盘交易时间为9:30~11:30 , 13:00~15:00这短短的4个小时,其他时间爬取的也是无用数据
    Relax(9.30)
    GetPrice(11.30,row)
    Relax(13.00)
    GetPrice(15.00,row)

这里定义了一个 Relax 函数,在非交易时间段,让爬虫休息

def Relax(start_time):
    while 1:
	    nowTimes = time.strftime('%H.%M',time.localtime())
	    print('当前时间:'+nowTimes,end=' ')
	    if float(nowTimes)>=start_time:
	        print('醒醒,该起床干活了,爬数据去...')
	        break
	    print('还早着呢,多睡会儿吧...')
	    time.sleep(60)
  • 全代码
from selenium import webdriver
from lxml import etree
import time
import requests
import xlrd,xlwt


def GetPrice(out_time,row):
    while 1:
        #获取当前页面源码
        html=browser.page_source
        #解析数据
        html_ele = etree.HTML(html)
        price = html_ele.xpath('/html/body/div[2]/div[1]/div[3]/table/tbody/tr/td[2]/div/table/tbody/tr[1]/td[1]/span/strong/text()')[0]
        nowTimes = time.strftime('%H.%M',time.localtime())
        print(nowTimes,price)
        #将数据写入xls表格
        sheet.write(row[0],0,nowTimes)
        sheet.write(row[0],1,float(price))
        row[0] = row[0]+1
        if float(nowTimes)>=out_time:
            print('时间到,下班喽')
            break
        time.sleep(60)

def Relax(start_time):
    while 1:
        nowTimes = time.strftime('%H.%M',time.localtime())
        print('当前时间:'+nowTimes,end=' ')
        if float(nowTimes)>=start_time:
            print('醒醒,该起床干活了,爬数据去...')
            break
        print('还早着呢,多睡会儿吧...')
        time.sleep(60)


if __name__=='__main__':
    #打开模拟浏览器
    browser = webdriver.Firefox()
    browser.get('http://quotes.money.163.com/0000001.html')
    print('获取网页信息')

    #创建储存数据的表格
    row = [1]
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet("sheet")
    sheet.write(0,0,'时间')
    sheet.write(0,1,'上证指数')

    #爬取数据
    Relax(9.30)
    GetPrice(11.30,row)
    Relax(13.00)
    GetPrice(15.00,row)

    print('保存数据')
    today = time.strftime('%Y-%m-%d',time.localtime())
    workbook.save("{}.xls".format(today))
    browser.close()

最后保存的文件名为今日

  • 效果图
    开始
    在这里插入图片描述
    最终数据
  • 总结
    该爬虫所用到的技术
  1. from selenium import webdriver: 爬取动态网页信息
  2. from lxml import etree:解析数据
  3. import xlrd,xlwt:对 excel 进行读写
  4. import time:控制时间,合理调度爬虫

最后,还请各位热爱python,热爱爬虫的小伙伴给出指导建议,一起交流,共同学习!!!

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值