Python爬取排列3开奖结果,并分析近x期盈利最多的选号

该代码示例展示了如何使用Python的requests、BeautifulSoup和xlwt库来抓取网页上的彩票开奖数据,解析HTML内容,然后将数据写入Excel表格。程序首先伪装用户代理以获取网页内容,接着解析页面,提取开奖期号、中奖号码等关键信息,并对数据进行简单的分析,如计算中奖次数和投资回报。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding: utf-8 -*-

import requests  # 爬虫库
import xlwt  # 写excel表库
import time  # 时间获取转换
from bs4 import BeautifulSoup  # 爬虫库


# 获取网页内容
def get_html(url):
    # 这是一个UA伪装,告诉网站你浏览器和操作系统系统
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
    response = requests.get(url, headers=headers)  # 用爬虫对象获取网页内容
    if response.status_code == 200:  # 对象状态码等于200说明获取网页内容成功
        # print('读取网页成功!')
        pass
        return response.text  # 返回获取的网页内容
    else:
        print('读网页失败,无数据!')
    return None


# 解析网页内容
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')  # 创建网页解析器对象
    i = 0
    # 查找网页里的tr标签,从第4个tr读到倒数第2个tr,因为通过对网页分析,前三个和最后一个tr没用
    for item in soup.select('tr')[3:-1]:  # 把查到的tr组成一个列表,item是列表指针,for每循环一次,item就选下一个tr,读完列表本循环结束,函数就结束,
        try:  # 不加try和except有的值是&nbsp,是网页里的空白键,会出错,加上调试命令忽略错误,后边统一处理
            yield {  # yield作用是得到数据立即返回给调用函数,但不退出本循环本函数
                'issue': item.select('td')[i].text,  # item查到的第0个td是开奖期号,写到time列
                'WinningNumbers': item.select('td')[i + 1].text,  # 0+1个td是中奖号码
                'sum': item.select('td')[i + 2].text,  # 总和数
                'Totalsales': item.select('td')[i + 3].text,  # 总销售额
                'Direct': item.select('td')[i + 4].text,  # 直选中奖注数
                'Direct_bonus': item.select('td')[i + 5].text,  # 直选总奖金
                'three_selection': item.select('td')[i + 6].text,  # 组选3中奖注数
                'three_selection_bonus': item.select('td')[i + 7].text,  # 组选3总奖金
                'six__selection': item.select('td')[i + 8].text,  # 组选6中奖数
                'six__selection_bonus': item.select('td')[i + 9].text,  # 组选6总奖金
                'time': item.select('td')[i + 10].text  # 开奖日期
                # 一组数据读完马上把值返回给调用函数,但没有退出本函数和本循环,
                # 调用函数得到数据,写到excel对象里,然后又回到这里,本次循环结束,开始下一次循环,item列表指针
            }
        except IndexError:
            pass


def write_to_list():
    b3 = 23157
    print('当前模式为直选复式')
    a3 = int(input('输入总期数'))

    # c3 = input("请输入0-9五位不重复的数字:")
    str_num = '0123456789'
    ch_num = int(input('请输入您要选择的数字个数,至少为3(3/4/5/6/7/8):'))
    price = 12
    if ch_num == 3:
        price = 12
    elif ch_num == 4:
        price = 48
    elif ch_num == 5:
        price = 120
    elif ch_num == 6:
        price = 240
    elif ch_num == 7:
        price = 420
    elif ch_num == 8:
        price = 672
    list_all = []
    print(f'您选择的是{ch_num}位,{a3}期总金额为{a3 * price}')

    for i in range(0, 9):
        for j in range(ch_num - 1 + i, 10):
            buy_num = str_num[i:i + ch_num - 1] + str(j)
            list_all.append(buy_num)

    count = len(list_all)
    list_money = []
    for i in range(count):
        c3 = list_all[i]

        # 选号
        nums = []
        for j in range(len(c3)):
            nums.append(int(c3[j]))

        # print(nums)

        i = 0
        # 用fiddler网页抓包得到真实网页地址,一次获取全部历史数据
        url = 'http://datachart.500.com/pls/history/inc/history.php?limit={}&start={}&end={}'.format(a3, b3 - a3 + 1,
                                                                                                     b3)
        html = get_html(url)  # 调用自定义函数,读网页获取网页内容

        list_num = []
        if html != None:  # 如果读网页没出错,读成功,则进行下一步,
            # 写入每一期信息
            '''
            调用自定义函数分析提取网页数据,保存到excel对象表中,item是循环中所调用的parse_html函数里的对象,是一个字典类型数据
            就是提取其它函数的item对象数据,写到excel表对象里
            '''
            for item in parse_html(html):
                # 下边的if是为了去掉列表里的乱码&nbsp,在网页里显示为空白,用0代替
                if item['three_selection'] == '&nbsp':
                    item['three_selection'] = '0'
                    item['three_selection_bonus'] = '0'
                else:
                    item['six__selection'] = '0'
                    item['six__selection_bonus'] = '0'
                # 处理数字
                num = ''.join(item['WinningNumbers'].split(' '))
                n3 = int(num[0])
                n2 = int(num[1])
                n1 = int(num[2])
                # print(n3, n2, n1)
                if n3 in nums and n2 in nums and n1 in nums:
                    list_num.append(num)

        # print(list_num)
        # print(len(list_num))
        # print(len(list_num))
        # print('最近{}期中奖次数:{}'.format(a3, len(list_num)))
        # print("投入{}期:{}".format(a3,a3 * 120))
        # print("回报{}期:{}".format(len(list_num),(len(list_num)) * 1040))
        # print("净赚:{}".format(len(list_num) * 1040 - a3 * 120))
        list_money.append((len(list_num) * 1040 - a3 * price))
    print(list_money)
    print('中奖次数'.format(len(list_num)))
    print('投入资金:{}'.format(a3 * price))
    print("近{}期盈利最大金额:{}".format(a3, max(list_money)))
    print("选号为:{}".format(list_all[list_money.index(max(list_money))]))


# 这是程序真正开始执行处,如果程序被直接执行了而不是被当作库调用,则运行main()函数
if __name__ == '__main__':
    write_to_list()

参考

http://t.csdn.cn/lhLxmhttp://t.csdn.cn/lhLxm

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值