python爬取双色球2003-2022年所有数据

765 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

最近再做一个有意思的深度学习回归实验,具体为:利用python爬取近20年的双色球数据号码,通过之前的数据为样本,利用下一年的数据作为标签,通过神经网络强大的非线性回归能力进行训练,最后预测出最新一期的数据号码,一方面可以通过这个学习整个神经网络的训练预测流程,一方面也可以满足自己好奇心,说不定就可以躺平了呢?哈哈啊哈,废话不多说,先爬取数据!

爬取数据直接上代码:

import requests, bs4
import os, time
import operator
from itertools import combinations, permutations
import torch


class DoubleColorBall(object):
    def __init__(self):
        self.balls = {}
        self.baseUrl = 'http://tubiao.zhcw.com/tubiao/ssqNew/ssqJsp/ssqZongHeFengBuTuAsc.jsp'
        self.dataFile = './balls_data3.txt'

    def getHtml(self, url):
        headers = {
            'Referer': 'http://tubiao.zhcw.com/tubiao/ssqNew/ssqInc/ssqZongHeFengBuTuAsckj_year=2016.html',
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
        }
        self.session = requests.Session()
        response = self.session.get(url, headers=headers)
        return response.text

    def getBall(self):
        for year in range(2003, 2022):
            url = self.baseUrl + '?kj_year=%s' % (year,)
            print(url)
            html = self.getHtml(url)
            self.bs = bs4.BeautifulSoup(html, 'html.parser')
            if self.bs:
                data = self.bs.find_all(class_='hgt')
                self.parseBall(data)

    def parseBall(self, data):
        self.balls = {}
        for row in data:
            if not isinstance(row, bs4.element.Tag):
                continue
            center = row.find(class_="qh7").string.strip()
            print(center)
            if center.startswith("模拟"):
                break
            redBalls = row.find_all(class_="redqiu")
            blueBall = row.find(class_="blueqiu3").string.strip()
            self.balls[center] = [r.string for r in redBalls] + [blueBall]

        self.saveBall(self.balls)

    def saveBall(self, data):
        with open(self.dataFile, 'a+') as f:
            for r in sorted(data, reverse=False):  #降序
            # for r in sorted(data, reverse=True):  #升序
                f.write(str(r) + ' ' + ' '.join(data[r]) + '\n')


if __name__ == '__main__':
    ball = DoubleColorBall()
    ball.getBall()

想爬取不同年限的数据,可以在上边修改代码即可~ 爬取之后的数据是以txt格式文件进行存储的,读取数据也是txt的格式。爬取之后就要进行预训练 的操作,把数据转化为网络可以识别的形式。

如果想要了解爬完数据之后的数据预处理操作步骤,可以参考我的这篇博客: 

利用python对得到的双色球数据预处理_心之所向521的博客-CSDN博客

加油!

image.png