博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
双色球笔记4--爬取500彩票网站双色球开奖信息
阅读量:4289 次
发布时间:2019-05-27

本文共 2731 字,大约阅读时间需要 9 分钟。

双色球笔记4--爬取500彩票网站双色球开奖信息

 

1、功能

本文实现的主要功能为从500彩票网站爬取历史开奖信息,并将信息保存到本地CSV文档中,以便于后续数据分析。500彩票网站上有03001--至今的往期双色球开奖信息,中间有些期数据没有统计,但总体上数据量相对较完整,因此笔者直接从该网站爬取数据。

网址:

 

2、代码

功能:爬取双色球开奖号码

# -*- coding:utf-8 -*-from requests_html import HTMLSessionimport csvimport datetime# Notice requests_html only supports python3.6.x def SaveToCSV(dataList,fileName,rwtype='w'):    with open(fileName, rwtype, newline='') as csvfile:        writer  = csv.writer(csvfile)        for row in dataList:            writer.writerow(row) def GetIssue(issue='03001'):    session = HTMLSession()    url = 'http://kaijiang.500.com/shtml/ssq/'+issue+'.shtml'    r = session.get(url)    ret = 'div > ul > li'    retcode = r.html.find(ret)    issueList = [issue]    for i in retcode:        arrdict = i.attrs        if( 'class' in arrdict.keys()):            arrtupple = arrdict['class']            if(arrtupple[0] == 'ball_red' or arrtupple[0] == 'ball_blue'):                issueList.append(i.text)    return issueList def DayCount(year,month,day):    count = 0    if year%400==0 or (year%4==0 and year%100!=0):        #print('%d年是闰年,2月份有29天!'%year)        li1 = [31,29,31,30,31,30,31,31,30,31,30,31]        for i in range(month-1):            count += li1[i]        return count+day    else:        #print('%d年是平年,2月份有28天!' % year)        li2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]        for i in range(month-1):            count +=li2[i]        return count+day def GetStr(val,Type=1):    if(Type==1): #xxcde,val->xx        if(len(str(val))==1):            return '0'+str(val)        else:            return str(val)    elif(Type==2): #abxxx,val->xxx        if(len(str(val))==1):            return '00'+str(val)        elif(len(str(val))==2):            return '0'+str(val)        else:            return str(val) def SaveAllIssues():    for i in range(3,19):        allIssueList = []        for j in range(1,155):            dtStruct = datetime.date.today()            dc = DayCount(dtStruct.year,dtStruct.month,dtStruct.day)            curDays = 7*(int(j/3))+(j%3)*2 #此处粗略以两天为间隔,实际应该为2 2 3            if(i>=(dtStruct.year %100) and curDays>=dc):                break            issueStr = GetStr(i,1)+GetStr(j,2)            tmpList = GetIssue(issueStr)            if(len(tmpList)>1 and tmpList[2]!='{Result2}'):                 #print(tmpList)                allIssueList.append(tmpList)        SaveToCSV(allIssueList,'LotteryIssues.csv','a')    if __name__ == '__main__':    print("Get All history lottery from http://www.500.com")    SaveAllIssues()

理论上一周开三次奖,但是有时候未按时开奖或者取消,导致curDays>=dc计算的期数比实际多几期;多出的几期爬取数据为异常数据,如下图(当前最新为18131期,根据日期和每周3次开奖应该到18134期),当u前根据其字符串内容已在程序中删除,后续若此部分有变需根据实际做修改。

 

3、说明

本代码当前测试环境为python3.6.3

注:requests-html当前只支持python3.6.x

转载地址:http://jflgi.baihongyu.com/

你可能感兴趣的文章
mysql中select * for update
查看>>
linux vmstat 1 ,watch , pmap -p,
查看>>
MYSQL 相关
查看>>
python 构建client 程序
查看>>
c++ 加载so动态库中的资源
查看>>
加解密 签名
查看>>
linux top 命令分析
查看>>
Linux vmstat命令详解
查看>>
linux pmap命令
查看>>
MySQL数据同步【双主热备】
查看>>
Mysql主从复制实践手册
查看>>
nginx配置正向代理支持HTTPS
查看>>
Perf -- Linux下的系统性能调优神器
查看>>
C++ 用libcurl库进行http通讯网络编程
查看>>
秒杀多线程第十篇 生产者消费者问题
查看>>
信号量与互斥锁
查看>>
linux 查看CPU个数,核数
查看>>
string 序列化
查看>>
va_start(),va_end()函数应用
查看>>
crontab命令
查看>>